我在 iPhone 上使用 MapKit。 我如何知道用户何时更改缩放级别(放大/缩小 map )?
我尝试使用 mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 但即使仅拖动 map 也会调用它。 不幸的是,当拖动 map 时,mapView.region.span 也会发生变化......
帮忙吗?
10倍
最佳答案
计算缩放级别非常简单。请参阅下面的代码段。您可以从 MKMapView
实例的 visibleMapRect
属性中获取 mRect 参数。
+ (NSUInteger)zoomLevelForMapRect:(MKMapRect)mRect withMapViewSizeInPixels:(CGSize)viewSizeInPixels
{
NSUInteger zoomLevel = MAXIMUM_ZOOM; // MAXIMUM_ZOOM is 20 with MapKit
MKZoomScale zoomScale = mRect.size.width / viewSizeInPixels.width; //MKZoomScale is just a CGFloat typedef
double zoomExponent = log2(zoomScale);
zoomLevel = (NSUInteger)(MAXIMUM_ZOOM - ceil(zoomExponent));
return zoomLevel;
}
您可能只在计算 zoomScale
的步骤停下来,因为它会告诉您缩放比例是否发生了变化。
我通过阅读 Troy Brants 关于该主题的优秀博客文章了解了这些内容:
http://troybrant.net/blog/2010/01/mkmapview-and-zoom-levels-a-visual-guide/
swift 3
extension MKMapView {
var zoomLevel: Int {
let maxZoom: Double = 20
let zoomScale = self.visibleMapRect.size.width / Double(self.frame.size.width)
let zoomExponent = log2(zoomScale)
return Int(maxZoom - ceil(zoomExponent))
}
}
关于iphone - 检查缩放级别是否改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359424/