8

我在 iOS (Swift) 和 Android 中使用谷歌地图服务。在 android 中,地图视图有一个名为的方法,该方法animatreCamera有一个动画,其中运动具有“缩小 - 放大”效果(如果两个相机具有相同的缩放,地图视图将缩小运动的第一部分和然后放大第二部分)。我想GMSMapView在iOS中实现这个效果,我尝试了以下方法:animateToCameraPositionanimateToLocation、和设置相机animateWithCameraUpdate,但没有一个有这个动画。如果可能,如何在移动相机时实现此动画?moveCameramapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0)

4

2 回答 2

6

我认为没有直接的方法可以在 Google Maps iOS SDK 中存档相同的动画。

一个解决方法可以使用iOS的dispatch_after方法,首先你可以定义一个方法来延迟你想要的秒数:

func delay(#seconds: Double, completion:()->()) {
    let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64( Double(NSEC_PER_SEC) * seconds ))

    dispatch_after(popTime, dispatch_get_main_queue()) {
        completion()
    }
}

然后你可以缩小你的相机,移动到一个位置,然后用delay方法放大:

delay(seconds: 0.5) { () -> () in
    var zoomOut = GMSCameraUpdate.zoomTo(kGMSMinZoomLevel)
    mapView.animateWithCameraUpdate(zoomOut)

    delay(seconds: 0.5, { () -> () in
        var vancouver = CLLocationCoordinate2DMake(49.26,-123.11)
        var vancouverCam = GMSCameraUpdate.setTarget(vancouver)
        mapView.animateWithCameraUpdate(vancouverCam)

        delay(seconds: 0.5, { () -> () in
            var zoomIn = GMSCameraUpdate.zoomTo(kGMSMaxZoomLevel)
            mapView.animateWithCameraUpdate(zoomIn)

        })
    })
}

您使用自己的缩放值,我在这里使用kGMSMinZoomLevelkGMSMaxZoomLevel

于 2015-06-17T23:27:58.830 回答
2

斯威夫特 4:

   func delay(seconds: Double, closure: @escaping () -> ()) {
    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
        closure()
    }
  }

然后调用它:

    delay(seconds: 0.5) { () -> () in
            let zoomOut = GMSCameraUpdate.zoom(to: 10)
            self.mapView.animate(with: zoomOut)

            self.delay(seconds: 0.5, closure: { () -> () in

            var vancouver = CLLocationCoordinate2DMake(49.26,-123.11)
            var vancouverCam = GMSCameraUpdate.setTarget(vancouver)
            self.mapView.animate(toLocation: vancouverCam)

            self.delay(seconds: 0.5, closure: { () -> () in
                 let zoomIn = GMSCameraUpdate.zoom(to: 15)
                 self.mapView.animate(with: zoomIn)

                })
            })
        }
于 2017-10-28T12:39:48.720 回答