iOS:为啥动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪?
Posted
技术标签:
【中文标题】iOS:为啥动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪?【英文标题】:iOS: Why the animation runs well with CABasicAnimation but looks weird with animateWithDuration?iOS:为什么动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪? 【发布时间】:2015-08-25 07:33:16 【问题描述】:这是一个使用动画旋转图像视图的简单演示。
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 。这是一个错误吗? 谢谢。
---- 更新 ----------------------------------
顺便说一句,图像视图以约束为中心。这可能是一个约束问题,我不确定。
【问题讨论】:
我也遇到了同样的问题,原因是你在为CATransform
制作动画,这是在图层而不是视图上完成的,这就是UIView.animateWithDuration
没有响应的原因跨度>
@sken3r.MI 我认为你是对的!您可以将其发布为答案,然后我可以接受吗?
【参考方案1】:
我也遇到了同样的问题,原因是你在为CATransform
制作动画,这是在图层而不是视图上完成的,这就是UIView.animateWithDuration
没有响应的原因
【讨论】:
以上是关于iOS:为啥动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪?的主要内容,如果未能解决你的问题,请参考以下文章
iOS:为啥动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪?
结合 drawRect 和 KeyPathAnimation 来取消闪烁