2

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 つのデバイスはすべて同じ WIFI に接続されています。iPhone 6+ はほとんど故障しませんが、iPhone 6 はほとんどの場合故障します。

助言がありますか?

4

2 に答える 2

3

私も時々これがあります。その場合、「タイル サーバー」(またはマップ タイルのダウンロードを担当するデーモン) がクラッシュしたというのが私の理論です。(MKMapView私が使用したインスタンスでさえタイルを表示しませんでした)

デバイスを再起動すると、常に修正されます。

于 2016-06-02T14:31:01.277 に答える