为什么设置当前区域时区域发生变化?
Why region is changed when I am setting current region?
我放了一个按钮,以便在给定点上添加一个圆圈叠加层。但是我不知道为什么,虽然区域没有改变,但我的叠加层看不到。
我找不到刷新或重新加载地图的功能。所以最后我决定稍微改变地图区域,这样用户就不会受到干扰。 (例如缩小一点)。
self.mapView.setRegion(mapView.region, animated: true)
我希望上面的代码不会改变地图区域,但是我也试过了,
self.mapView.setRegion(MKCoordinateRegion(mapView.visibleMapRect), animated: true)
这也改变了地图的区域。
我能做什么?
这就是我添加叠加层的方式
func addCircles() {
let center = self.myPinView.center
let origin = self.mapView.convert(center, toCoordinateFrom: mapView)
let overlay1 = MKCircle(center: origin, radius: 3)
let overlay2 = MKCircle(center: origin, radius: 7.5)
let overlay3 = MKCircle(center: origin, radius: 15)
self.mapView.addOverlay(overlay1)
self.mapView.addOverlay(overlay2)
self.mapView.addOverlay(overlay3)
}
这是我的代理函数
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKCircle {
let circle = MKCircleRenderer(overlay: overlay)
circle.fillColor = circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.6)
circle.strokeColor = .red
return circle
} else {
return MKOverlayRenderer()
}
}
尝试将它们封装在一个dsipatchQueue.main
DispatchQueue.main.async {
self.mapView.setRegion(mapView.region, animated: true)
}
其实我用不同的观点解决了我的特殊问题。我最初的问题是,在用户选择一个位置后我想画一个圆圈。但是,直到地图区域发生变化,我的叠加层才会出现。我试图立即画出这个圆圈。我找到的最用户友好的解决方案是将 mapView 中心设置为叠加中心。
self.mapView.setCenter(origin, animated: false)
这样,用户选择一个位置后,立即将地图聚焦到该位置并显示叠加。
我放了一个按钮,以便在给定点上添加一个圆圈叠加层。但是我不知道为什么,虽然区域没有改变,但我的叠加层看不到。
我找不到刷新或重新加载地图的功能。所以最后我决定稍微改变地图区域,这样用户就不会受到干扰。 (例如缩小一点)。
self.mapView.setRegion(mapView.region, animated: true)
我希望上面的代码不会改变地图区域,但是我也试过了,
self.mapView.setRegion(MKCoordinateRegion(mapView.visibleMapRect), animated: true)
这也改变了地图的区域。
我能做什么?
这就是我添加叠加层的方式
func addCircles() {
let center = self.myPinView.center
let origin = self.mapView.convert(center, toCoordinateFrom: mapView)
let overlay1 = MKCircle(center: origin, radius: 3)
let overlay2 = MKCircle(center: origin, radius: 7.5)
let overlay3 = MKCircle(center: origin, radius: 15)
self.mapView.addOverlay(overlay1)
self.mapView.addOverlay(overlay2)
self.mapView.addOverlay(overlay3)
}
这是我的代理函数
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKCircle {
let circle = MKCircleRenderer(overlay: overlay)
circle.fillColor = circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.6)
circle.strokeColor = .red
return circle
} else {
return MKOverlayRenderer()
}
}
尝试将它们封装在一个dsipatchQueue.main
DispatchQueue.main.async {
self.mapView.setRegion(mapView.region, animated: true)
}
其实我用不同的观点解决了我的特殊问题。我最初的问题是,在用户选择一个位置后我想画一个圆圈。但是,直到地图区域发生变化,我的叠加层才会出现。我试图立即画出这个圆圈。我找到的最用户友好的解决方案是将 mapView 中心设置为叠加中心。
self.mapView.setCenter(origin, animated: false)
这样,用户选择一个位置后,立即将地图聚焦到该位置并显示叠加。