2017-06-21 6 views
0

Ich versuche, einige Phantasie Drehung (mit Tonhöhe) Animation auf der MapKit machen. Mit diesem CodeiOS - MapKit Kamera Rotation Animation

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)") 
     }) 
} 

Aber wenn ich ausführen, um die Funktion schnappt er nur an die angegebene Position, Tonhöhe und Höhe OHNE Animieren. Was habe ich verpasst oder falsch gemacht?

Vielen Dank im Voraus!

Antwort

1

Ich weiß, dass muss eine bessere Möglichkeit, dies zu tun, aber das ist die Art und Weise, die ich gefunden habe und funktioniert, das Hauptproblem ist zu wissen, wann die Animation beendet ist, ich finde keine Ahnung davon, so ich benutze 2 Sekunden als willkürliche Zeit

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) 
    } 
} 

Hoffnung, dies hilft Ihnen

+0

Dank Reinier! –