当前,我将标记设置为可拖动,用户可以在当前地图相机中拖动它。当标记到达屏幕边缘时,相机不会移动以提供连续的拖拉体验。当标记到达屏幕边缘时,如何使Google Maps相机移动?
// Is not working as the marker and map keeps moving
func mapView(_ mapView: GMSMapView, didDrag marker: GMSMarker) {
let camera = GMSCameraPosition(target: marker.position, zoom: zoom)
self.mapView.map.animate(to: camera)
}
答案 0 :(得分:1)
您使用了正确的功能,但首先需要检查当前标记位置是否在mapView的边界内。如果它不在边界范围内,那么我们必须设置相机位置。
用以下代码替换didDrag函数
func mapView(_ mapView: GMSMapView, didDrag marker: GMSMarker) {
if !isMarkerWithinScreen(marker: marker) {
let camera = GMSCameraPosition(target: marker.position, zoom: mapViewForScreen.camera.zoom)
self.mapView.animate(to: camera)
}
}
将此功能添加到viewController中,以检查标记是否超出范围。
func isMarkerWithinScreen(marker: GMSMarker, _ mapView: GMSMapView) -> Bool {
let region = self.mapView.projection.visibleRegion()
let bounds = GMSCoordinateBounds(region: region)
return bounds.contains(marker.position)
}
我已经做到了。随时询问您是否仍然面临此问题。