当标记拖动达到iOS中的屏幕边界时,如何移动地图相机?

时间:2019-05-14 08:12:03

标签: ios swift google-maps-sdk-ios

当前,我将标记设置为可拖动,用户可以在当前地图相机中拖动它。当标记到达屏幕边缘时,相机不会移动以提供连续的拖拉体验。当标记到达屏幕边缘时,如何使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)
}

1 个答案:

答案 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)
    }
    

我已经做到了。随时询问您是否仍然面临此问题。