我正通过显示成千上万的数据来改善mapView的性能。集群已经完成,每次用户平移地图的摄像机时都会加载一组新的数据,并且为此添加了一个限制因素,以避免网络请求垃圾邮件。
不过,我的下一个想法是删除现有注释,如果它们在当前相机之外 。问题是:如何计算给定的坐标/注释是在当前摄影机的外部还是内部?
这是我的一部分代码:
@objc func throttleDone() {
let newCoordinatesOfCamera = self.mapView.camera.centerCoordinate
let newLocationOfCamera = CLLocation(latitude: newCoordinatesOfCamera.latitude, longitude: newCoordinatesOfCamera.longitude)
// Remove current annotations outside the camera.
// TODO HERE: ---
// Fetch new data inside the camera
self.fetchNearByEstablishments(newLocationOfCamera)
}
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
self.hideBottomInfo()
// Fetch new annotations with throttle
self.timer?.invalidate()
self.timer = Timer.scheduledTimer(timeInterval: 1.5, target: self, selector: #selector(self.throttleDone), userInfo: nil, repeats: false)
}
我觉得这很容易,但是我在SO和Google上找不到任何答案。谢谢!
答案 0 :(得分:1)
MKMapView
具有region
属性,该属性是地图的可见区域。您可以检查注释的坐标是在其内部还是外部。现在,您知道搜索词了,对此将有很多答案。请注意,如果摄像机倾斜,则该区域将比实际可见区域大一点,因为该区域始终是矩形,但是成角度的摄像机将显示(我认为)等腰梯形。
如果您的背景是Google及其地图框架,则摄像头是通常的思考方式,但是在iOS中,区域是考虑摄像头的通常方式,而摄像头更倾向于倾斜和旋转。