iphone - 检查缩放级别是否改变

标签 iphone objective-c iphone-sdk-3.0 mapkit mkmapview

我在 iPhone 上使用 MapKit。 我如何知道用户何时更改缩放级别(放大/缩小 map )?

我尝试使用 ma​​pView:(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/

相关文章:

iphone - 是否可以设置 UIImageView 图像的位置?

ios - 创建动画图像蒙版

objective-c - 引用计数,ARC

iphone - Xcode 3.1.3 - Organizer 设备未激活。请使用 iTunes 激活

iphone - 除非调用复制,否则键盘不会显示在 UIWebView 内的输入字段上

iphone - Xcode 有没有办法警告新的 API 调用?

iphone - 以编程方式更改 UISlider 的范围

ios 应用程序崩溃,没有日志

ios - 配置文件到期后上传新的应用程序版本

objective-c - 谁能帮我画一个条形图...?