2013-04-26 12 views

risposta

29

Il modo più veloce è utilizzare le funzioni di Apple integrate che renderanno questo tipo di cose super veloce!

if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate))) 
{ 
    //Do stuff 
} 

Dove coordinare è il vostro CLLocation2D.

Questo sarà molto più veloce di elaborare le coordinate con una dichiarazione di massa se. La ragione è che Apple usa un Quadtree e può fare ricerche veloci per te.

2

Swift 3 compatibile

Se si lavora spesso con le mappe vi suggerisco di creare un interno in questo modo:

extension MKMapView { 

    func contains(coordinate: CLLocationCoordinate2D) -> Bool { 
     return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate)) 
    } 

} 

quindi è possibile utilizzare ovunque, ad esempio:

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 
    if mapView.contains(coordinate: mapView.centerCoordinate) { 
     // do stuff 
    } 
} 

In questo modo si mantiene il codice:

  • più gestibile: se Apple decide di cambiare i suoi quadri si sarà in grado di fare un refactoring rapida evoluzione codice in un unico punto
  • più verificabili
  • più leggibile e pulito