spring效果的旋转动画
Rotation animation with spring effect
我想用 spring 效果旋转 CAShapeLayer(就像在 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
中一样)但是在层上而不是在视图上。
点击按钮时,其主层的子层应旋转到 3*PI/4,spring 应弹回 2*PI/3。然后,当再次点击按钮时,图层旋转应该按照与之前相反的顺序进行:首先反弹到 2*PI/3,然后旋转到初始位置(在第一次旋转之前)。
我怎么做到的?我无法通过 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
实现它,因为图层的变换 属性 默认情况下是可动画的。
我试过改变CATransaction
但它只旋转了一个角度(没有考虑其他旋转):
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()
更新
根据 我尝试使用 CASpringAnimation
并且我在一个方向上实现了动画:
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")
但是如何在点击按钮时反转动画?
在此先感谢您的帮助。
UIView 块动画用于动画视图属性。您可以使用 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:
为按钮的变换(CGAffineTransform 类型,二维变换)设置动画
不过,如果您需要为图层属性设置动画,则需要使用 Core Animation。
Apple 似乎在 iOS 9 中添加(或制作 public)一个 spring CAAnimation。但是它似乎不在 Xcode 文档中。
查看此线程:
SpringWithDamping for CALayer animations?
我想用 spring 效果旋转 CAShapeLayer(就像在 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
中一样)但是在层上而不是在视图上。
点击按钮时,其主层的子层应旋转到 3*PI/4,spring 应弹回 2*PI/3。然后,当再次点击按钮时,图层旋转应该按照与之前相反的顺序进行:首先反弹到 2*PI/3,然后旋转到初始位置(在第一次旋转之前)。
我怎么做到的?我无法通过 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
实现它,因为图层的变换 属性 默认情况下是可动画的。
我试过改变CATransaction
但它只旋转了一个角度(没有考虑其他旋转):
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()
更新
根据 CASpringAnimation
并且我在一个方向上实现了动画:
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")
但是如何在点击按钮时反转动画?
在此先感谢您的帮助。
UIView 块动画用于动画视图属性。您可以使用 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:
不过,如果您需要为图层属性设置动画,则需要使用 Core Animation。
Apple 似乎在 iOS 9 中添加(或制作 public)一个 spring CAAnimation。但是它似乎不在 Xcode 文档中。
查看此线程:
SpringWithDamping for CALayer animations?