iOS MapKit - 检测地图何时完全放大?
iOS MapKit - Detect when map is fully zoomed in?
所以我正在使用聚类库对注释进行分组,但它有一个小错误,当地图完全放大时,一些非常靠近的注释可能会出现分组。这是一个框架,我不能这样做很多关于它的直接信息,但如果地图完全放大,我可以禁用所有分组。问题是我无法找到一种可靠的方法来做到这一点。
这是我的 regionDidChangeAnimated
代码,理想情况下,我想在其中检查地图是否已完全放大(放大到您无法再放大的程度)。
func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
NSOperationQueue().addOperationWithBlock {
let scale: Double = Double(self.map.bounds.size.width) / self.map.visibleMapRect.size.width
let annotations = self.clusteringManager?.clusteredAnnotationsWithinMapRect(self.map.visibleMapRect, withZoomScale: scale)
self.clusteringManager?.displayAnnotations(annotations, onMapView: self.map)
}
}
我已经尝试检查 mapView.region.span
属性 但我确信这会根据屏幕尺寸等而改变...
有什么建议吗?提前致谢。
您需要扩展 MKMapView:
class YourMapView : MKMapView {
// function returns current zoom level of the map
func getCurrentZoom() -> Double {
var angleCamera = self.camera.heading
if angleCamera > 270 {
angleCamera = 360 - angleCamera
} else if angleCamera > 90 {
angleCamera = fabs(angleCamera - 180)
}
let angleRad = M_PI * angleCamera / 180
let width = Double(self.frame.size.width)
let height = Double(self.frame.size.height)
let offset : Double = 20 // offset of Windows (StatusBar)
let spanStraight = width * self.region.span.longitudeDelta / (width * cos(angleRad) + (height - offset) * sin(angleRad))
return log2(360 * ((width / 256) / spanStraight)) + 1;
}
}
现在您可以在以下委托方法中读出当前的缩放级别:
regionDidChangeAnimated
和
regionWillChangeAnimated
所以我正在使用聚类库对注释进行分组,但它有一个小错误,当地图完全放大时,一些非常靠近的注释可能会出现分组。这是一个框架,我不能这样做很多关于它的直接信息,但如果地图完全放大,我可以禁用所有分组。问题是我无法找到一种可靠的方法来做到这一点。
这是我的 regionDidChangeAnimated
代码,理想情况下,我想在其中检查地图是否已完全放大(放大到您无法再放大的程度)。
func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
NSOperationQueue().addOperationWithBlock {
let scale: Double = Double(self.map.bounds.size.width) / self.map.visibleMapRect.size.width
let annotations = self.clusteringManager?.clusteredAnnotationsWithinMapRect(self.map.visibleMapRect, withZoomScale: scale)
self.clusteringManager?.displayAnnotations(annotations, onMapView: self.map)
}
}
我已经尝试检查 mapView.region.span
属性 但我确信这会根据屏幕尺寸等而改变...
有什么建议吗?提前致谢。
您需要扩展 MKMapView:
class YourMapView : MKMapView {
// function returns current zoom level of the map
func getCurrentZoom() -> Double {
var angleCamera = self.camera.heading
if angleCamera > 270 {
angleCamera = 360 - angleCamera
} else if angleCamera > 90 {
angleCamera = fabs(angleCamera - 180)
}
let angleRad = M_PI * angleCamera / 180
let width = Double(self.frame.size.width)
let height = Double(self.frame.size.height)
let offset : Double = 20 // offset of Windows (StatusBar)
let spanStraight = width * self.region.span.longitudeDelta / (width * cos(angleRad) + (height - offset) * sin(angleRad))
return log2(360 * ((width / 256) / spanStraight)) + 1;
}
}
现在您可以在以下委托方法中读出当前的缩放级别:
regionDidChangeAnimated
和
regionWillChangeAnimated