ios - GMSMapView animateToCameraPosition 放大-缩小动画

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

我在 iOS (Swift) 和 Android 中使用 Google map 服务。在 android 中, map View 有一个名为 animatreCamera 的方法,它有一个动画,其中的运动具有“缩小 - 放大”效果(如果两个相机具有相同的缩放, map View 将缩放缩小运动的第一部分,然后放大第二部分)。我想在 iOS 中使用 GMSMapView 实现此效果,我尝试了以下方法:animateToCameraPositionanimateToLocationanimateWithCameraUpdate, moveCamera 并通过 mapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0) 设置相机,但它们都没有这个动画。如果可能的话,移动相机时如何实现这个动画?

最佳答案

我认为没有直接的方法可以在 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

关于ios - GMSMapView animateToCameraPosition 放大-缩小动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898937/

相关文章:

ios - 安装 osx 安全更新后无法提交 ios 应用程序以供审核

swift - 往返数据的往返 Swift 数字类型

javascript - loadGeoJson 不工作

ios - 设备上的键盘扩展崩溃

ios - Xcode 5 didupdatelocations 不工作

ios - Crashlytics奇怪的崩溃报告-com.apple.main-thread。 EXC_BREAKPOINT

ios - 如何使用 Swift 通过 LE 蓝牙将 MIDI 数据从 iOS 发送到 OS X

swift - 如何访问 textDidChange(_ :) as data for the NSTableView functions? 内自动创建的字典

iOS Google Maps SDK - 隐藏/删除标签

android - 在多层android google maps中传播事件