GMSMapView animateToCameraPosition放大 - 缩小动画

Osc*_*uez 6 google-maps ios google-maps-sdk-ios gmsmapview swift

我在iOS(Swift)和Android中使用谷歌地图服务.在android中,地图视图有一个名为animatreCamera动画的方法,其中动作具有"缩小 - 放大"效果(如果两个相机具有相同的缩放,则地图视图将缩小动画的第一部分,然后放大第二部分).我想实现与这种效果GMSMapView在iOS中,我已经试过TE以下方法:animateToCameraPosition,animateToLocation,animateWithCameraUpdate,moveCamera并通过设置摄像头mapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0)和他们都没有这个动画.如果可能,在移动相机时如何实现此动画?

zta*_*tan 5

我认为没有直接方法可以在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()
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以缩小相机,移至某个位置,然后使用以下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)

        })
    })
}
Run Code Online (Sandbox Code Playgroud)

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