iOS MapKit - определить, когда карта полностью увеличена?
Поэтому я использую кластерную библиотеку для группировки аннотаций, и в ней есть небольшая ошибка, из-за которой некоторые очень близко расположенные аннотации могут отображаться сгруппированными, когда карта полностью увеличена. Поскольку это основа, я не могу ничего с этим поделать, но Я могу отключить все группировки, если карта полностью увеличена. Проблема в том, что я не могу найти надежный способ сделать это.
Вот мой 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
свойство, но я уверен, что это изменится в зависимости от размера экрана и т.д...
Какие-либо предложения? Заранее спасибо.
1 ответ
Вам нужно расширить свой 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