如果我有一个 MKMapView 和一个 CLLocationCoordinate2D 你如何测试地图的可见区域是否包含坐标?
			
			5540 次
		
3 回答
            33        
        
		
最快的方法是使用内置的 Apple 功能,这将使这种事情变得超级快!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
    //Do stuff
}
其中坐标是您的 CLLocation2D。
这将比使用批量 if 语句计算坐标要快得多。原因是 Apple 使用四叉树并且可以为您进行快速查找。
于 2013-04-26T15:26:22.987   回答
    
    
            6        
        
		
Swift 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
    }
}
通过这种方式,您可以保留代码:
- 更易于维护:如果 Apple 决定更改其框架,您将能够在单点进行快速重构更改代码
- 更可测试
- 更具可读性和清洁性
于 2017-05-25T13:14:24.653   回答
    
    
            0        
        
		
swift 5.1 我的两分钱
  extension MKMapView {
      func contains(coordinate: CLLocationCoordinate2D) -> Bool {
        return self.visibleMapRect.contains(MKMapPoint(coordinate))
    }
 }
于 2019-11-21T11:07:13.990   回答