2013-04-26 73 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 
    } 
} 

通过这种方式您可以保留代码:

  • 更易于维护:如果苹果决定改变它的框架你将能够做到快速重构中的单点
  • 更容易测试
  • 更具可读性和干净更改代码
相关问题