CAAnimationGroup组合动画框架
复杂动画效果的痛点,就是多个动画要一起执行还得保持节奏一致。CAAnimationGroup的组合动画能力,挺适合搞定这种场景的。你可以把多个CAAnimation实例,比如旋转、路径移动,统一放到一个组里,一起加到图层上,执行起来就丝滑了。
CAAnimationGroup的用法其实也蛮直接:先写好各个子动画,比如用CABasicAnimation
做旋转,用CAKeyframeAnimation
搞路径;塞进animationGroup.animations
里,设定个duration
,layer.add(animationGroup, forKey:)
一下就搞定。
动画执行的时间点可以用beginTime
控制,效果延续也能通过fillMode
配合removedOnCompletion
来玩出花。还有个细节,completionHandler
别忘了,加点逻辑在动画结束后一下,比如页面跳转、状态更新啥的。
举个例子,让图片转一圈再按路径飘过去:
let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
rotationAnimation.fromValue = 0
rotationAnimation.toValue = Double.pi * 2
let path = UIBezierPath()
// 添加路径点...
let pathAnimation = CAKeyframeAnimation(keyPath: "position")
pathAnimation.path = path.cgPath
let animationGroup = CAAnimationGroup()
animationGroup.animations = [rotationAnimation, pathAnimation]
animationGroup.duration = 2.0
imageView.layer.add(animationGroup, forKey: "myAnimation")
用起来感觉还蛮灵活的,是跟CAKeyframeAnimation搭配的时候,可以做一些比较酷的交互,比如按钮点击的震动反馈、图片拖动的惯性动画等等。
小建议哦:duration
别设太长,节奏太慢容易让用户觉得卡;还有就是不再需要的动画记得移除,免得内存泄露。,CAAnimationGroup用好了,动画体验会提升一大截。
想深入了解的朋友可以看看这些文章:
评论区