在didupdatelocation中运行的地图视图不会允许用户在地图上滚动



我有一个谷歌地图视图,每当位置经理收到更新的位置时,它都会以用户位置为中心。然而,我希望用户能够在地图上自由平移/缩放,而不会让相机位置每隔一秒左右跳回用户位置

我已经将.isMyLocationEnabled设置为false,因为我已经设计了一个自定义图标(在我的情况下是一艘飞船(来表示用户的位置。

此外,我创建了自己的按钮,允许用户平移回用户的最后位置(出于上述原因,我没有使用谷歌内置的位置按钮(。示例代码中没有包含这一点,但它确实可以正常工作。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.last {
self.camera = GMSCameraPosition.camera(withLatitude: location.coordinate.latitude, longitude: location.coordinate.longitude, zoom: 15)
self.mapViewHere.isMyLocationEnabled = false // don't want the standard blue dot or location button
self.mapViewHere.camera = self.camera
/// plot our custom GMSMarker here
let currentPosition = GMSMarker()
currentPosition.map = nil // clear the last location
currentPosition = GMSMarker(position: location.coordinate)
currentPosition.icon = myCustomMarker.png
currentPosition.rotation = (locationManager.location?.course)!
currentPosition.map = self.mapViewHere

} // end locations.first
}// end location manager

因为我正在用didUpdateLocations中调用的自定义GMSMarker绘制用户位置,所以我不认为停止更新功能会是答案,因为我希望即使用户缩放/平移也能继续这样做。

综上所述;是否可以显示一张最初以用户位置为中心的地图(并随着设备的移动而更新(,但每当用户在地图上平移/缩放时,didUpdateLocations一触发,视图就不应自动返回到用户位置?用户应该能够通过按下自定义按钮来触发返回到初始状态。

我正在用Xcode和Swift 4开发我的应用程序。

在珀斯iOS开发小组的指导下解决了我的问题;

首先定义一个布尔变量;

var auto: Bool = true

倾听用户的操作并相应地调整变量:

func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
if gesture {
self.auto = false
print("map view moved, self.auto set to (self.auto)")
}
}

并在locationManager didUpdateLocation中使用此变量,以在didUpdateLocation触发时有效地忽略用户位置的地图重绘。

if self.auto {
print("self.auto is true, back to auto-camera-tron")
self.camera = GMSCameraPosition.camera(withLatitude: location.coordinate.latitude, longitude: location.coordinate.longitude, zoom: 15)
}

只要在if self.auto之前声明,我的自定义位置图标就会一直在didUpdateLocation上绘制

最后,我可以通过简单地更改self.auto = true,将我的自定义位置按钮设置为返回到以用户位置为中心

相关内容

  • 没有找到相关文章