这是一个使用动画旋转图像视图的简单演示。
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
@IBAction func left() {
animateWithTransform(CATransform3DMakeRotation(CGFloat(M_PI_4), 0, 0, 1))
}
@IBAction func right() {
animateWithTransform(CATransform3DMakeRotation(CGFloat(-M_PI_4), 0, 0, 1))
}
func animateWithTransform(transform: CATransform3D) {
UIView.animateWithDuration(1) {
self.imageView.layer.transform = transform
}
}
}
动画运行流畅。将 right() 更新为:
@IBAction func right() {
animateWithTransform(CATransform3DMakeRotation(CGFloat(-M_PI_4), 0, 1, 0))
}
点左再右,动画不再流畅。图像视图在开始动画之前跳转到一个角度。为什么?
更新 animateWithTransform() 以使用 CABasicAnimation 代替:
func animateWithTransform(transform: CATransform3D) {
let animation = CABasicAnimation(keyPath: "transform")
animation.duration = 1
animation.fromValue = NSValue(CATransform3D: imageView.layer.transform)
animation.toValue = NSValue(CATransform3D: transform)
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
imageView.layer.addAnimation(animation, forKey: nil)
imageView.layer.transform = transform
}
动画又好了。
所以问题是为什么我不能在这里使用 animateWithDuration 。这是一个错误吗?谢谢。
- - 更新 - - - - - - - - - - - - - - - - -
顺便说一句,图像视图以约束为中心。这可能是一个约束问题,我不确定。