2016-07-31 25 views
2

Ich möchte die Rotation von CAShapeLayer mit Federeffekt machen (wie in UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)) aber auf Schicht nicht auf einen Blick.Rotationsanimation mit Federeffekt

Wenn die Schaltfläche angetippt wird, sollte die Unterschicht der Hauptschicht auf 3 * PI/4 und die Feder auf 2 * PI/3 springen. Wenn die Taste erneut angetippt wird, sollte die Layerrotation in umgekehrter Reihenfolge als zuvor ausgeführt werden: Zuerst auf 2 * PI/3 springen und dann auf die Anfangsposition drehen (vor der ersten Drehung).

Wie könnte ich das tun? Ich kann es nicht unter UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:) erreichen, da die transform-Eigenschaft der Ebene standardmäßig animiert werden kann.

Ich habe versucht CATransaction ändern, aber es dreht sich nur um einen Winkel (ohne Berücksichtigung anderer Drehung zu nehmen):

let rotation1 = CGAffineTransformRotate(CGAffineTransformIdentity, angle1) 
let rotation2 = CGAffineTransformRotate(CGAffineTransformIdentity, angle2) 
let transform = CGAffineTransformConcat(rotation1, rotation2) 
CATransaction.begin() 
CATransaction.setAnimationDuration(0.6) 
self.plusLayer.setAffineTransform(transform) 
CATransaction.commit() 

aktualisieren

Nach Duncan C post Ich versuche CASpringAnimation zu verwenden und ich achive Animation in eine Richtung:

myLayer.setAffineTransform(CGAffineTransformMakeRotation(angle)) 
let spring = CASpringAnimation(keyPath: "transform.rotation") 
spring.damping = 12.0 
spring.fromValue = 2.0 * CGFloat(M_PI) 
spring.toValue = 3.0 * CGFloat(M_PI_4) 
spring.duration = 0.5 
myLayer.addAnimation(spring, forKey: "rotation") 

Aber wie diese Animation auf die Schaltfläche angezapft umzukehren?

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

2

UIView Blockanimation dient zum Animieren von Ansichtseigenschaften. Sie könnten die Transformation der Schaltfläche (vom Typ CGAffineTransform, eine 2D-Transformation) animieren, indem Sie

verwenden Wenn Sie Ebeneneigenschaften animieren müssen, müssen Sie jedoch Core Animation verwenden.

Es scheint, dass Apple eine Spring CAAnimation in iOS 9 hinzugefügt (oder öffentlich gemacht) hat. Es scheint jedoch nicht in den Xcode-Dokumenten zu sein.

Schauen Sie sich diesen Thread:

SpringWithDamping for CALayer animations?

+0

Dank! Es hat mir sehr geholfen! Aber ich habe noch ein Problem: Wie kann ich diese Animation auf Knopfdruck umkehren? – krlb

+0

Hier ist eine Möglichkeit: Erstellen Sie Instanzvariablen, die den aktuellen Wert von und zu den Rotationswerten verfolgen und bei jedem Klicken auf die Schaltfläche umschalten. –

+0

Sie haben Recht, es funktioniert! Danke nochmal! – krlb