5

みなさん、こんにちは!

iPhone用のアプリケーションを開発しています。テーブルビューと、ユーザーに表示する必要のある場所のリストがあります。この目的のために、すべてのテーブルビューセルでMKMapViewを使用しました。しかし、場所がたくさんある場合、このソリューションは非常に遅くなります。UIのパフォーマンスを改善し、MKMapViewをUIImageViewに置き換えたいと思います。そのため、非メインスレッドでMKMapViewからUIImageにマップをレンダリングする必要があります。私はこのようにそれをやろうとしました:

UIGraphicsBeginImageContext(CGSizeMake(64, 64));
CGContextRef context = UIGraphicsGetCurrentContext();
[[mapView layer] renderInContext:context];
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

ただし、このコードは、マップの黄色の背景と指定された場所の上のピンのみをレンダリングします。通りや家などの地図データはありません。何を間違えたのですか?アドバイスありがとうございます。

4

1 に答える 1

3

マップ データを取得していないのは、マップ データが読み込まれるのを待っていないためです。マップ ビューのmapViewDidFinishLoadingMap:デリゲート メソッドが呼び出されるまで待ってから、写真を撮ります。この質問で言及したように、デリゲート メソッドが少し早く呼び出されることがあることがわかったため、デリゲート メソッドが呼び出されてから 1 ~ 2 秒の少し遅れて写真を撮る必要がある場合があります。

- (void)mapViewDidFinishLoadingMap:(MKMapView*)mapView {
    double delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        UIGraphicsBeginImageContext(CGSizeMake(64, 64));
        CGContextRef context = UIGraphicsGetCurrentContext();
        [mapView.layer renderInContext:context];
        thumbnail_image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    });
}

注: マップ ビューの寸法を正方形にして、正方形の画像でレンダリングしたときにぎこちなく引き伸ばされないようにする必要があります。

于 2012-12-06T01:43:27.120 に答える