【发布时间】: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 函数而不更改地图缩放级别。
我想要的结果:
【问题讨论】: