MKMapSnapshotter 的 startWithCompletionHandler 方法上的完成处理程序有什么原因不会被回调吗?(即使没有错误!!
我没有做任何花哨的事情,只是抓取快照并显示它,所有这些都在前台,没有后台处理。
不寻常的是,它似乎完全随机,这意味着有时它工作得很好,有时它永远不会。
这是我的代码:
MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
options.size = somePredeterminedSize;
options.scale = [[UIScreen mainScreen] scale];
options.mapType = MKMapTypeStandard;
options.region = MKCoordinateRegionMakeWithDistance(mycoordinate, 1000, 1000);
MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
[snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
if (error) {
NSLog(@"[Error] %@", error);
return;
}
MKAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:nil];
pin.image = [UIImage imageNamed:@"map-pin"];
UIImage *image = snapshot.image;
UIGraphicsBeginImageContextWithOptions(image.size, YES, image.scale);
[image drawAtPoint:CGPointMake(0.0f, 0.0f)];
CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
CGPoint point = [snapshot pointForCoordinate:self.bureau.coordinate];
if (CGRectContainsPoint(rect, point)) {
point.x = point.x + pin.centerOffset.x - (pin.bounds.size.width / 2.0f);
point.y = point.y + pin.centerOffset.y - (pin.bounds.size.height / 2.0f);
[pin.image drawAtPoint:point];
}
UIImage *compositeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}];
我已经在多个设备上同时对此进行了测试,每个设备都运行不同的iOS版本:运行 iOS 8.4 的 iPhone 5S运行 iOS 9.2 的 iPhone 6运行 iOS 8.2 的 iPhone 6+
所有 3 台设备都连接到同一个无线网络。iPhone 6+几乎永远不会失败,而iPhone 6几乎总是失败。
有什么建议吗?
我遇到了同样的问题,在我的应用程序中,我有一个带有一些 地图图像 ,如果您按下图像,其中一个选项是在地图应用程序中打开它。在iPhone上,它完美地创建了图像,但在iPad上,直到我尝试在Apple"地图"应用程序中打开地址(使用MKMapItem.openMapsWithItems ...),它打开了地图应用程序并显示权限警报,我按"允许",回到我的应用程序,它开始完美运行。
尝试打开地图应用程序,允许权限,看看它是否适用于您的应用程序。
希望对您有所帮助。
我有时也有这个。我的理论是,在这种情况下,"切片服务器"(或任何负责下载地图切片的守护进程)已经崩溃。(即使是我使用的MKMapView
实例也没有显示任何磁贴)
重新启动设备总是为我修复它。