2016-12-08 2 views
6

Ich habe ein UIImageView mit einem Bild dort, dieses Bild ist ein typischer Kartenpflücker. Ich habe es im Storyboard auf die Karte gelegt und einige Einschränkungen zugewiesen.Wie kann ich UIImageView animieren, wenn der Benutzer MKMapView zieht?

Wenn der Benutzer sich um meine Karte bewegt, bleibt dieses Bild unberührt, ich möchte eine Art der Animation finden - im Grunde möchte ich es ein wenig zerquetschen, damit es aussieht, als würde es gezogen.

Ich habe bereits zwei Methoden:

func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) { 

} 

und

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 

} 

Aber ich weiß nicht, wie die Änderung UIImageView zu animieren.

Ich habe versucht, das Hinzufügen zu regionWillChangeAnimated den folgenden Code:

myPositionPicker.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { 
     yawpPositionPicker.transform = CGAffineTransform(translationX: 0, y: 0) 
    }, completion: nil) 

(wo myPositionPicker ist mein UIImageView), aber ich bin immer Fehler

Static member animate cannot be used on instance of type UIImageView 

Ich denke, die beste Animation für mich sein würde, UIViewAnimationOptions.curveEaseIn aber ich weiß nicht, wie man es an meine UIImageView anhängen kann. Kannst du mir einen Hinweis geben?

Antwort

1

Zunächst einmal versuchen Sie statische Methode „belebte“ auf Instanz myPositionPicker zu verwenden. Und es ist falsch. Ersetzen Sie einfach

myPositionPicker.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { 
    yawpPositionPicker.transform = CGAffineTransform(translationX: 0, y: 0) 
}, completion: nil) 

mit:

UIView.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { 
    // Do whatever animations you want here. 
}, completion: nil) 

Als nächstes, wenn Sie einige einfache Animationen erstellen möchten (wie von UIImageView Position zu verändern oder es ist Größe zu ändern) - Sie müssen nur Ihre bereits erstellten Einschränkungen nutzen könnten und don verwende keine affinen Transformationen.

Zum Beispiel, wenn Ihre Bildansicht vertikal mit Ihrer Kartenansicht zentriert ist. Zuerst eine besondere @IBOutlet für diese Einschränkung in Ihrem UIViewController erstellen:

@IBOutlet var pickerCenterYConsraint: NSLayoutConstraint! 

Zweitens verbinden Sie diesen Ausgang in Storyboard Zwang.

Drittens, wie ich Ihren View Controller verstanden habe, ist ein Delegierter Ihrer Kartenansicht. Also, lassen Sie uns das Kartenansicht-Delegierten-Protokoll folgendermaßen implementieren:

func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) { 
    UIView.animate(withDuration: 1.5, delay: 0.05, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { 
     self.pickerCenterYConsraint.constant = 25.0 
     self.view.layoutIfNeeded() 
    }, completion: nil) 
} 

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 
    UIView.animate(withDuration: 1.5, delay: 0.05, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { 
     self.pickerCenterYConsraint.constant = 0.0 
     self.view.layoutIfNeeded() 
    }, completion: nil) 
} 

Und das ist alles! Jetzt wird Ihre Bildansicht beim Ziehen der Kartenansicht animiert. Wenn Sie diese Lösung nicht mögen - Sie könnten Ihre eigenen Animationen basierend auf Einschränkungen erstellen. Im Grunde könnten Sie viele Dinge mit Einschränkungen tun. Außer zum Beispiel Rotationen.

+0

Gibt es eine Möglichkeit, das Bild leicht zu kippen? oder das Bild strecken/eingrenzen? Ich muss den Effekt erzielen, indem ich das Bild nicht auf und ab bewege, sondern dehne, kippe, etc. – user3766930

Verwandte Themen