我正在使用 REST API ( https://restcountries.eu/ ) 并希望下载标志图像(.svg)并将其显示为UIImage. 我尝试了标准方法:
func requestData(at url: URL, success: @escaping (_ data: Data) -> Void, failure: ((_ error: NetworkError) -> Void)? = nil) {
let request = URLRequest(url: url)
let task = URLSession.shared.dataTask(with: request) { (responseData, response, responseError) in
DispatchQueue.main.async {
if responseError != nil {
failure?(.failedRequest)
} else if let data = responseData {
success(data)
} else {
failure?(.corruptedData)
}
}
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
数据下载得很好,但是当我尝试用 来显示图像时UIImage(data: data),图像是nil. 我错过了什么吗?
我有一个项目有两个不同的目标(同一个应用程序的免费和付费版本),我有一个list项目,我保存到NSUserDefaults. 我的问题是,有没有办法在两个版本的应用程序之间共享这个列表,而不使用KeyChain或类似的东西?
我已经以UITableView编程方式创建,但它下面有一些额外的空间(准确地说是29个像素).
这是我初始化表的方式:
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
[tableView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView addSubview:tableView];
self.alertsTableView = tableView;
Run Code Online (Sandbox Code Playgroud)
以下是约束:
@"V:|-10-[_alertsTableView(0)]-5-[_optionsLabel]",
@"H:|-15-[_alertsTableView]-15-|",
Run Code Online (Sandbox Code Playgroud)
我尝试将页脚视图设置为nil并为其高度返回零:
[self.tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
Run Code Online (Sandbox Code Playgroud)
我根据内容动态改变它的高度:
- (void)updateHeight:(CGFloat)height {
if (self.tableView.superview) {
NSLayoutConstraint *heightConstraint;
for (NSLayoutConstraint *constraint in self.tableView.superview.constraints) {
if (constraint.firstAttribute == NSLayoutAttributeHeight) {
heightConstraint = constraint;
break;
}
}
heightConstraint.constant = height;
}
}
Run Code Online (Sandbox Code Playgroud)
我也开始setAutomaticallyAdjustsScrollViewInsets了NO.而这就是最终的结果.单元格和空白区域之间有一个分隔符,但底部不是单元格.
我试图获取一个点的坐标,该点距起始位置一定距离,但最终结果是错误的。
首先,我计算起始位置和所需目的地之间的角度:
private func calculateAngleBetweenLocations(currentLocation: CLLocationCoordinate2D, targetLocation: CLLocationCoordinate2D) -> Double {
let fLat = self.degreesToRadians(currentLocation.latitude);
let fLng = self.degreesToRadians(currentLocation.longitude);
let tLat = self.degreesToRadians(targetLocation.latitude);
let tLng = self.degreesToRadians(targetLocation.longitude);
let deltaLng = tLng - fLng
let y = sin(deltaLng) * cos(tLat)
let x = cos(fLat) * sin(tLat) - sin(fLat) * cos(tLat) * cos(deltaLng)
let bearing = atan2(y, x)
return self.radiansToDegrees(bearing)
}
Run Code Online (Sandbox Code Playgroud)
然后,在给定距离的情况下计算新点:
private func coordinatesForMovement(endLocation: CLLocationCoordinate2D, distance: Double) -> CLLocationCoordinate2D {
let angle = self.calculateAngleBetweenLocations(self.currentLocation, targetLocation: endLocation)
let x = self.currentLocation.latitude + …Run Code Online (Sandbox Code Playgroud)