【问题标题】:GMSMapView animateToCameraPosition zoom in - zoom out animationGMSMapView animateToCameraPosition 放大 - 缩小动画
【发布时间】:2015-06-17 17:58:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案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)
      
                      })
                  })
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多