4

MKMapView に複数のオーバーレイをロードする方法が必要な状況があります。このマップ ビューは画面に表示されるべきではありません。ロードする必要がある唯一の理由は、マップから画像を作成して他の場所で使用するためです。

私はオンラインで見回しましたが、問題の解決策を見つけることができませんでした。誰か助けてください。

これが私がこれまでに試したことです(成功しませんでした)

// Load the map view
Logs_Map_ViewController *mapViewController = [[Map_ViewController alloc] initWithNibName:@"Map_ViewController" bundle:nil];
mapViewController.GPSCoordinatesToPlot = [someDictionary objectForKey:kGPSCoords];

// Take a picture of the map
UIImage *mapImage = [mapViewController convertMapToImage];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(mapImage)];
NSString *base64String = [imageData base64EncodedString];

注:マップが完全に読み込まれるまでアプリが待機することが非常に重要です (画像が適切に作成されるようにするため)。

4

3 に答える 3

1

これは役立つかもしれないし、役に立たないかもしれませんが、これは私の状況で私がしていることです。

7つのテーブルセルがある会場/ビジネスのテーブルビューがあります。テーブルセルの1つに、ピンドロップ付きのマップが含まれています。ユーザーが施設を初めて表示するときに、クイック条件を実行して、マップビューがキャッシュされているかどうか(つまり、画像として保存されているかどうか)を確認します。画像が存在しない場合は、新しいマップビューをセルにロードし、単一のピンドロップ注釈を追加します。マップビューが読み込まれ、注釈が削除されたら、ビューレイヤーを画像に保存し、セルからマップビューを削除して(デリゲートを存続させる必要があるため、解放します)、新しい画像に置き換えます。画像を保存する/セルに挿入するために、背景スレッドを生成することをお勧めします。このようにして、テーブルビューが詰まることはありません。

そして最後に、次にユーザーが同じ会場/ビジネスに戻ったときに、マップビュー画像が存在し、画像を読み込みます。

地図を完全に読み込むことが重要だと思います。そうしないと、地図が読み込まれなかった場所に画像が灰色で保存されます。ピンドロップをドロップする場合は、マップのロードが完了した後(mapViewDidFinishLoadingMap :)とアノテーションがドロップした後(mapView:didAddAnnotationViews :)の両方で、画像保存メソッドが起動することを確認する必要があります。両方が終了した後でのみ、画像を保存するメソッドを起動する必要があります。遅延セレクターを使用することをお勧めします。1秒遅らせます。

これと同じ概念は、他の状況にも確実に適用できます。結論として、strings42が示すように、画像をキャプチャするには、ビューに表示可能なマップビューを追加する必要があります。

于 2012-05-19T20:53:52.930 に答える
0

プロトコルに実装mapViewDidFinishLoadingMapして、MKMapViewDelegateそこに画像を保存できるはずだと思います。これで、画像を保存するためにマップが読み込まれるまで待つ必要があるという問題が解決するはずです。

他の問題も発生している場合は、質問している特定の問題について質問が明確ではないため、それらについて詳しく説明してください。

于 2012-05-14T17:16:15.740 に答える
0

以下のメソッドは、常に mapView のデリゲートとして呼び出されます。

mapViewDidFinishRenderingMap:fullyRendered:

したがって、ここでmapViewからマップ画像を取得できます

- (UIImage *)renderToImage:(MKMapView *)mapView
{
  UIGraphicsBeginImageContext(mapView.bounds.size);
  [mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return image;
}
于 2013-12-24T14:53:43.017 に答える