2017-06-21 164 views
0

我试图做一些花哨的旋转(带间距)的MapKit动画。有了这个代码的iOS - MapKit相机旋转动画

func animateCamera() { 
     let newCamera: MKMapCamera? = mapView.camera 
      newCamera?.pitch = 90.0 
      newCamera?.heading = 180.0 
      newCamera?.altitude = 200.0 

     let camera: MKMapCamera? = mapView.camera 
      camera?.pitch = 0.0 
      camera?.heading = 360.0 
      camera?.altitude = 20.0 

     UIView.animate(withDuration: 3.0, delay: 0.0, options: ([.curveLinear, .beginFromCurrentState]), animations: {() -> Void in 
      self.mapView.setCamera(newCamera!, animated: true); 
     }, completion: {(_ finished: Bool) -> Void in 
      print("has not been interrupted : \(finished)") 
     }) 

     UIView.animate(withDuration: 3.0, delay: 3.0, options: ([.curveLinear, .beginFromCurrentState]), animations: {() -> Void in 
      self.mapView.setCamera(camera!, animated: true); 
     }, completion: {(_ finished: Bool) -> Void in 
      print("has not been interrupted : \(finished)") 
     }) 
} 

但是当我运行它只是捕捉到给定航向,俯仰和高度WITHOUT动画功能。有什么我错过或做错了?

在此先感谢!

回答

1

我知道,必须有更好的方式来做到这一点,但是这是我发现的方式,工作时,主要的问题是当动画结束就知道了,我没有发现任何线索吧,所以我使用2个秒钟任意时间

func animateCamera() { 
    let newCamera: MKMapCamera = MKMapCamera(lookingAtCenter: self.mapView.camera.centerCoordinate, fromDistance: 200.0, pitch: 90.0, heading: 180.0) 
    self.mapView.setCamera(newCamera, animated: true) 

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(2 * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC)) { 
     let newCamera: MKMapCamera = MKMapCamera(lookingAtCenter: self.mapView.camera.centerCoordinate, fromDistance: 20.0, pitch: 0.0, heading: 360.0) 
     self.mapView.setCamera(newCamera, animated: true) 
    } 
} 

希望这有助于你

+0

谢谢Reinier! –