ios - 为什么当我添加注释时我的 map View 会放大?

标签 ios swift mapkit

我有一个配置的 MKMapView:

static let STARTING_MAP_RANGE: Double = 1000  // meters
. . .
let region: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(location,
                                                                    MapViewController.STARTING_MAP_RANGE,
                                                                    MapViewController.STARTING_MAP_RANGE)

mapView.setRegion(region, animated: true)

我为当前位置添加了注释,一切看起来都很好。当我为可见区域中的其他点添加注释时,MKMapView 会放大到显示所有注释所需的最小区域。

奇怪的是,我试图通过打印左下角和右上角的纬度和经度来找出发生这种情况的位置,如下所示:

private func printMapRegion(caller: String)
{
    let mapRect = mapView.visibleMapRect;
    let bottomLeft = MKCoordinateForMapPoint(MKMapPointMake(mapRect.origin.x, MKMapRectGetMaxY(mapRect)))
    let topRight = MKCoordinateForMapPoint(MKMapPointMake(MKMapRectGetMaxX(mapRect), mapRect.origin.y))

    print("\(caller):  (\(bottomLeft.latitude),\(bottomLeft.longitude)) -- (\(topRight.latitude),\(topRight.longitude))")
}

当我在设置注释之前和之后运行此命令时,尽管看到 map 在屏幕上缩放(在模拟器和我的 iPhone 中),但我得到了相同的值。

我添加了一个刷新按钮来重置 map 。它可以缩小 map ,但它还报告缩放前后的左下角和右上角坐标是相同的。

我对visibleMapRect的理解有问题吗?

最佳答案

我发现缩放的原因是我添加了这样的注释:

    mapView.removeAnnotations(mapView.annotations)
    mapView.addAnnotations(annotations)
    mapView.showAnnotations(mapView.annotations, animated: true)

删除对 showAnnotations 的调用消除了该问题。我仍然很好奇为什么visibleMapRect在可见缩放后报告相同的边界坐标。

关于ios - 为什么当我添加注释时我的 map View 会放大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50437164/

相关文章:

swift - 什么时候是mapView :viewForAnnotation called in Swift?

iphone - 强制 MapKit 仅使用缓存的 map 图 block /以编程方式禁用网络

ios - 让 TextView 适合内容并向上移动 View - Swift

ios - 如何在问答应用中使用MVC的模型?

swift - Swift 3 中的动画曲线

ios - 将数据库中的值读入数组

swift - 默认情况下,TabBar 上的选定项目不会突出显示

ios - 位置权限检查和授权

ios - 删除后将 SKSpriteNode 子节点添加回父节点

ios - xcode 获取 UITabBar 高度