Ich bin neu in UIView Animationen & habe Probleme beim Verständnis der Ausführung dieser Logik. Ich habe ein ImageView erstellt, um ein Bild aufzunehmen, ich habe einen Tap Gesture Recognizer hinzugefügt und das UIImageView auf "User Interaction Enabled" gesetzt. & rufe eine IBAction für dieses TGR auf. Dann rufe ich die Funktion unten auf, wenn das Bild angetippt wird. Das Ziel ist es, das Bild mit einer federnden Bewegung, wie es gestanzt wurde, zu "knacken", um zurück zu den ursprünglichen Grenzen des Bildes zu springen, so dass Sie erneut schlagen können. Es funktioniert genau so, wie ich es möchte (obwohl ich normalerweise mit Duration auf 0,25 setze, setze ich es hier auf 10, um die Animation besser sehen zu können). Allerdings verstehe ich nicht wirklich, warum das funktioniert. Die letzte Zeile legt die Endgrenzen des Bildes glatt auf die ursprüngliche Begrenzungsgröße fest (was ich will), aber das tut es glatt, obwohl es nicht Teil des Animationsblocks in der Schließung ist. Wenn ich die letzte Zeile eliminiere, die die Grenzen für das Bild zurücksetzt, wird das Bild nach jeder Ausführung um 60 Pixel in jeder Richtung wachsen (was ich erwarten würde). Was ich nicht verstehe, ist: Warum funktioniert die letzte Zeile in der Funktion, self.imageToPunch.bounds = Grenzen, reibungslos und scheinbar in Verbindung mit dem Animationsblock, auch wenn sie nicht innerhalb dieser Schließung ist?Unklar, warum UIView.animate reibungslos funktioniert, aber mit Code außerhalb des Animationsblocks
func animateImage() {
// Create a variable holding the bounds of the image
let bounds = self.imageToPunch.bounds
// Setup and execute the animation
UIView.animate(withDuration: 10.00, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [], animations: {
self.imageToPunch.bounds = CGRect(x: bounds.origin.x - 60, y: bounds.origin.y - 60, width: bounds.size.width + 60, height: bounds.size.height + 60)
}, completion: nil)
// Reset the bounds of button so it doesn't grow (remember we spring 60 pixels from the corners)
// self.imageToPunch.bounds = bounds
self.imageToPunch.bounds = bounds
}
ja das ist seltsam, ich denke, wenn die Animation den nächsten Wert beginnt ist im Stapel abgelegt, so dass die Animation denkt, dass sie auch den nächsten beenden muss. Nun, ich bin mir nicht sicher. Wenn Sie Ihren Code verstehen möchten, sollten Sie eine neue UIView.animate mit Verzögerung Ihrer ersten Animation schreiben und sie zurück ändern. Es ist sicherer und wird in jeder Situation funktionieren. –