2016-07-22 26 views

Antwort

1

Sie können eine MKMapView auf Ihre Tabellenzelle hinzufügen, aber die bessere Möglichkeit, Schnappschüsse zu gehen wäre MKSnapshotter zu verwenden, zu erstellen und das Hinzufügen sie stattdessen auf Ihre Zellen.

Von NSHipster ‚s Blog-Post here, Codebeispiel Bild zum Abrufen von einem MKMapSnapshotter ist:

MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init]; 
options.region = self.mapView.region; 
options.size = self.mapView.frame.size; 
options.scale = [[UIScreen mainScreen] scale]; 

NSURL *fileURL = [NSURL fileURLWithPath:@"path/to/snapshot.png"]; 

MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options]; 
[snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) { 
    if (error) { 
     NSLog(@"[Error] %@", error); 
     return; 
    } 

    UIImage *image = snapshot.image; 
    NSData *data = UIImagePNGRepresentation(image); 
    [data writeToURL:fileURL atomically:YES]; 
}]; 

options auf den Snapshot hier MKMapSnapshotOptions sind vergangen. Lesen Sie den Blog für weitere Informationen und vollständige Anleitung.

MKMapSnapshotter ist auch flexibel genug, um Standard/benutzerdefinierte Anmerkungen zu den Schnappschüssen hinzuzufügen, wie Sie in Frage gestellt haben.

Beispielcode aus der gleichen Quelle, mit Anmerkung ist:

[snapshotter startWithQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 
       completionHandler:^(MKMapSnapshot *snapshot, NSError *error) { 
     if (error) { 
      NSLog(@"[Error] %@", error); 
      return; 
     } 

     MKAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:nil]; 

     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); 
      for (id <MKAnnotation> annotation in self.mapView.annotations) { 
       CGPoint point = [snapshot pointForCoordinate:annotation.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(); 
      NSData *data = UIImagePNGRepresentation(compositeImage); 
      [data writeToURL:fileURL atomically:YES]; 
     } 
     UIGraphicsEndImageContext(); 
}]; 

Tha Fang hier ist, werden Sie ein Bild aus dem Snapshot mit benutzerdefinierten Code erstellen müssen.

Sobald der Snapshot erstellt wurde, können Sie ihn in Ihrer Zelle darstellen.

Wenn Sie dies weiter optimieren möchten, können Sie den generierten Snapshot im lokalen Speicher speichern und ihn bei der Wiederverwendung von Zellen für dieselben Koordinaten verwenden, anstatt jedes Mal ein Bild zu generieren, wenn die Zelle erneut verwendet wird.

Lesen Sie die offizielle Dokumentation für MKMapSnapshotterHERE und MKSnapshotOptionsHERE.

+1

Vielen Dank für die detaillierte Erklärung, schätze es! –