将Google地图相机移动到某个位置

25

我正在使用谷歌地图视图,并希望在地图上添加一个按钮,当点击时,将移动摄像机到特定的位置。我目前有一个按钮出口和与该按钮连接的操作。

@IBAction func locationTapped(_ sender: Any) {
    print("tapped")
    let location = GMSCameraPosition.camera(withLatitude: place.latitude, longitude: place.longitude, zoom: 17.0)

    mapView.camera = location
}

place存在,但相机由于某种原因无法移动。我尝试了不同版本的代码并查看了Google Maps文档,但选项中没有产生结果。有人能告诉我我做错了什么吗?

6个回答

41

GMSMapView类具有以下功能:

animate(to: GMSCameraPosition)

所以在您的代码示例中,不要这样做:

mapView.camera = location

试着这样做:

mapView.animate(to: location)
希望这可以帮到你!

嗨,我们尝试实现了这个功能,但是除非用户与地图进行交互,否则相机不会移动。一旦用户触摸/点击地图,相机就会移动到所需位置。我们错过了什么吗? - shoan
@shoan 我也遇到了同样奇怪的问题。如果你找到了解决方案,请告诉我。我还没有能够找出问题出在哪里。 - shashi Gupta

19

Swift3Swift4中,将标记移动到当前位置,请使用以下代码:

func myLocationBtnAction(_ sender: UIButton) {
            mapView.moveCamera(GMSCameraUpdate.setTarget(CLLocationCoordinate2D(latitude: (mapView.myLocation?.coordinate.latitude)!, longitude: (mapView.myLocation?.coordinate.longitude)!), zoom: 16))

对于特定位置,请使用以下内容:

let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lng, zoom: 16)
            mapView?.camera = camera
            mapView?.animate(to: camera)

不要忘记为当前位置扩展GMSAutocompleteViewControllerDelegate


3

Swift 2.3

这段代码是用于我的目的的。其中使用了标记物点击事件,可以移动地图的相机位置。希望您能找到解决方案。

 func mapView(mapView: GMSMapView, didTapMarker marker: GMSMarker) -> Bool {
        mapView.selectedMarker = marker
        var point = mapView.projection.pointForCoordinate(marker.position)
        let camera = mapView.projection.coordinateForPoint(point)
        let position = GMSCameraUpdate.setTarget(camera)
        mapView.animateWithCameraUpdate(position)
        return true
    }

1
对于Objective-c语言,该方法为:
[mapView moveCamera:[GMSCameraUpdate setTarget:<CLLocationCoordinate2DMake>]];

0
   func moveMapCamera(at cordinate: CLLocationCoordinate2D, animated: Bool = false) {
        let camera = MKMapCamera()
        camera.centerCoordinate = cordinate
        camera.pitch = 0
        camera.altitude = 9000
        mapV.setCamera(camera, animated: animated)
    }

0

也许现在有点晚了,但我通过添加以下内容解决了这个问题:

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500), execute: {
        let camera = GMSCameraPosition.camera(withLatitude: lat!, longitude: lon!, zoom: 17.0)
        self.mMap.animate(to: camera)
    })

你必须等待地图加载委托


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接