从未调用过MKMapSnapshotter startWithCompletionHandler

时间:2016-01-26 12:08:36

标签: ios objective-c iphone mkmapsnapshotter

有没有理由说明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版本: iPhone 5S运行iOS 8.4 iPhone 6运行iOS 9.2 iPhone 6+运行iOS 8.2

所有3台设备都连接到同一台WIFI。 iPhone 6+几乎永远不会失败,而iPhone 6几乎总是这样。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我有同样的问题, 在我的应用程序中,我有一些地址列表和一些地图图像,如果你按下图像,其中一个选项是在地图应用程序中打开它。 在iPhone上它完美地创建了图像,但是在iPad上我没有尝试在Apple“地图”应用程序中打开地址(使用MKMapItem.openMapsWithItems ...),它打开了地图应用程序并显示了权限,我按下“允许”,回到我的应用程序,它开始工作完美。

尝试打开Goog​​le地图应用,允许权限,并查看它是否适用于您的应用。

希望它有所帮助。

答案 1 :(得分:3)

我有时也会这样。我的理论是,“tile服务器”(或任何守护进程负责下载地图图块)在这种情况下已经崩溃。 (即使我使用的MKMapView个实例也没有显示任何图块)

重新启动设备总是为我修复它。