2013-04-26 79 views

回答

29

最快的方法是使用內置的蘋果功能,這將使這種事情超快!

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

其中座標是您的CLLocation2D。

這比使用批量if語句計算座標快得多。原因是Apple使用Quadtree,並且可以爲您快速查找。

2

斯威夫特3兼容

如果您經常使用的地圖工作,我建議你創建一個這樣的擴展:

extension MKMapView { 

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

} 

然後你可以使用的地方,例如:

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

通過這種方式您可以保留代碼:

  • 更易於維護:如果蘋果決定改變它的框架你將能夠做到快速重構中的單點
  • 更容易測試
  • 更具可讀性和乾淨更改代碼
相關問題