首页 > 解决方案 > 如何偏移地图中心

问题描述

我有一个带有地图预览的应用程序,它在点击它后会全屏显示动画:

在此处输入图像描述

由于mapView底部的半透明条,我设法mapView.setVisibleMapRect(mapView.visibleMapRect, edgePadding: UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0), animated: false) 在地图完成后通过调用来偏移地图的中心:

mapView.showsUserLocation = true
    
let regionRadius: CLLocationDistance = 700
let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: regionRadius, longitudinalMeters: regionRadius)
mapView.setRegion(region, animated: true)

现在我想扩大mapView以填满整个屏幕。好消息是地图缩放和位置保持不变,只是框架扩展,完全符合预期(userPosition 仍然居中,但不可见,因为它就在半透明面板顶部的后面,只需比较地图):

在此处输入图像描述

不好的是,我希望地图中心位于蓝色框和半透明面板之间。问题是,当我尝试偏移地图以在地图新可见区域的中心显示用户位置时。我需要setVisibleMapRect再次使用该功能(据我了解)来设置新的 edgePadding。但是我测试的所有内容都以地图放大或缩小结束,当我在展开和折叠状态之间跳转时,我越来越缩小。

所以我搜索了一种方法来稍微偏移地图以正确显示用户位置,mapView.setEdgePadding(UIEdgeInsets(...), animated: true) 或者我需要一种MKMapRect根据当前缩放级别和新框架计算正确的方法,所以我可以在setVisibleMapRect不更改地图缩放的情况下使用该功能等级。

我想要的结果:

在此处输入图像描述

标签: iosswiftuikitmapkit

解决方案


如果您希望用户更加动态地居中,请考虑

mapView.setUserTrackingMode(.followWithHeading, animated: animated)

或者

mapView.setUserTrackingMode(.follow, animated: animated)

这可以改变缩放级别。

如果您只想将用户位置的中心设置一次,请尝试

var region  = mapView.region
region.center = userLocation
mapView.setRegion(region, animated: true)

这不应该改变缩放级别


推荐阅读