2016-07-22 8 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) 위치, 적절한 시간에 UITableview에서 특정 셀의 이미지를 설정할 수 있습니까? –

+0

그게 달려 있습니다 - 언제 "적절한 때"입니까? 스냅 샷은 꽤 빠르며, 필요할 때 지연된 이미지를 사용하고 지연이 눈에 띄지 않습니다. 서명을'renderSnapshotForlocation : (CLLocationCoordinate2D) inCell : (UITableViewCell *) cell'으로 변경하고 콜백에서'cell'을위한 이미지를 설정할 수 있습니다. 완전히 동기적인 것을 원하는 것처럼 들리지만지도 이미지가 렌더링 될 때까지 UI를 차단하고 싶지는 않습니다. 가능한 한 빨리 스냅 샷을 시작하고 완료 될 때 필요한 위치에 이미지를 놓습니다. – dylansturg

+0

감사합니다. renderSnapshotForlocation : (CLLocationCoordinate2D) 위치 inCell : (UITableViewCell *) cell이 내가 필요한 것입니다. –