2016-07-22 2 views
0

私は自分のAPPに位置共有を実装していますので、緯度と経度に応じて複数のスナップショットを生成する必要があります。単に直接使用する:緯度と経度を指定してスナップショットを生成する最良の方法は、MKMapViewをスキップすることです。

- (UIImage*) renderToImage:(MKMapView*) view 
{ 
    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0); 
    [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

私は未完成のスナップショットにつながります。

は、私は次のコードを使用してみました:私も、私はそれが完全にロードされ知っているスナップショットを設定し、右のセルに戻って取得するために

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered 
    { 
     // Image creation code here 
    } 

しかし、それは難しいです。

こういう複雑な手順をせずに緯度と経度から直接スナップショットを生成するAPIはありますか?事前に皆さんありがとう!

答えて

1

この目的でMKMapSnapshotterを使用できます。ある地域を中心とした特定の場所に地図のイメージを作成することができます。

- (void)renderSnapshotForLocation:(CLLocationCoordinate2D)location { 
    MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init]; 
    options.size = CGSizeMake(200, 200); // whatever size you need 
    options.scale = [[UIScreen mainScreen] scale]; 
    // size of region in degrees of latitude and longitude 
    MKCoordinateSpan span = MKCoordinateSpanMake(0.25, 0.25); 
    options.region = MKCoordinateRegionMake(location, span); 

    MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options]; 
    [snapshotter startWithCompletionHandler:^(MKMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { 
     if(snapshot){ 
      UIImage *mapImage = snapshot.image; 
      // do what you need with the image 
      return; 
     } 

     NSLog(@"Error rendering snapshot for map at: (%f, %f)", options.region.center.latitude, options.region.center.longitude); 
     NSLog(@"%@", error); 
    }]; 
} 

good article on NSHipsterMKMapSnapshotterがあります。

+0

MKMapSnapshotterについて知っておくと良いですが、まだ少し混乱しています。他の関数の[snapshotter startWithCompletionHandler:^()]ブロックrenderSnapshotForLocation:(CLLocationCoordinate2D)location、適切なタイミングでUITableview内の特定のセルの画像を設定する方法はありますか? –

+0

それは依存している - 「正しい時」はいつですか?スナップショットはかなり高速ですが、必要なときに遅延読み込み画像を使用し、遅延が目立たないようにしています。シグネチャを 'renderSnapshotForlocation:(CLLocationCoordinate2D)inCell:(UITableViewCell *)cell'に変更し、コールバックの' cell'の画像を設定することができます。あなたは完全に同期しているものがほしいと思うようですが、地図画像がレンダリングされるまでUIをブロックしたいとは思っていません。できるだけ早くスナップショットを開始し、完了したら必要な場所にイメージを配置します。 – dylansturg

+0

ありがとう、renderSnapshotForlocation:(CLLocationCoordinate2D)location inCell:(UITableViewCell *)cellは私が必要なものです。 –

関連する問題