2013-08-13 5 views

risposta

5

Che ne dite di questi due metodi della classe MapKit:

1) Ottenere rettangolo visibile della mappa utilizzando:

@property(nonatomic, readonly) CGRect annotationVisibleRect 

http://developer.apple.com/library/ios/DOCUMENTATION/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instp/MKMapView/annotationVisibleRect

2) Quindi ottenere l'annotazione NSSet dal parametro mappa rettangolo:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect 

http://developer.apple.com/library/ios/DOCUMENTATION/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instm/MKMapView/annotationsInMapRect:

Così mi sarei aspettato qualcosa di simile:

-(void)getAnotationsInVisibleMapRectangle 
{ 
    NSSet *annotationSet = [myMapView annotationsInMapRect:myMapView.annotationVisibleRect]; 

    // print number of annotations 
    NSLog(@"Number of annotations in rect: %d", annotationSet.count); 

    // this will return an array from the NSSet 
    NSArray *annotationArray = [annotationSet allObjects]; 
} 

fa questo aiuto?

+0

E 'bello, ma bisogno di convertire CGRect (myMapView.annotationVisibleRect) per MKMapRect? "annotationInMapRect (MKMapRect)" ... – Nubaslon

+0

Grazie! =) Mi aiuta) e io uso "visibleMapRect" invece di "annotationVisibleRect" – Nubaslon

+0

mi ha aiutato molto..grazie –

9

Per quanto riguarda la rapida 2.0, io di solito uso questa estensione MapView per ottenere tutte le annotazioni attualmente visibili come un array di MKAnnotations:

extension MKMapView { 
    func visibleAnnotations() -> [MKAnnotation] { 
     return self.annotationsInMapRect(self.visibleMapRect).map { obj -> MKAnnotation in return obj as! MKAnnotation } 
    } 
} 
+0

estremamente utile. –

+0

se alcune annotazioni si trovano sul bordo dello schermo, non funziona – vinbhai4u

+0

Per quel particolare scenario, è possibile passare un MapRect più grande invece del valore predefinito visibleMapRect. –

Problemi correlati