如何偏移地图中心
Posted
技术标签:
【中文标题】如何偏移地图中心【英文标题】:How to offset Map center 【发布时间】:2021-05-26 16:24:38 【问题描述】:我有一个带有地图预览的应用,点击它后会全屏显示动画:
由于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
函数而不更改地图缩放级别。
我想要的结果:
【问题讨论】:
【参考方案1】:如果您希望用户更加动态地居中,请考虑
mapView.setUserTrackingMode(.followWithHeading, animated: animated)
或
mapView.setUserTrackingMode(.follow, animated: animated)
这可以改变缩放级别。
如果您只想设置用户位置的中心,请尝试
var region = mapView.region
region.center = userLocation
mapView.setRegion(region, animated: true)
这不应该改变缩放级别
【讨论】:
问题是不在地图中心显示用户位置。我需要告诉地图,它的视图的一部分是可见的,应该在其中定义中心。 你有没有试过“如果你想设置用户位置的中心,只尝试一次”之后的部分? 是的,我已经有了这个。我更新了我的问题以获取更多信息。 我是否理解正确,您给地图的像素更少,而 mapView 使地图 content 更小,因此您看到的区域与以前相同?以上是关于如何偏移地图中心的主要内容,如果未能解决你的问题,请参考以下文章