CABasicAnimation添加到图层时key的重要性及多视图复用疑问
CABasicAnimation中forKey参数的作用与重复key的可行性
一、forKey参数的核心作用
- 作为单个图层内动画的唯一标识:后续可以通过
layer.animation(forKey: "jiggle")获取该动画实例,或者用layer.removeAnimation(forKey: "jiggle")精准移除它。 - 避免同一图层内重复添加同key动画:如果给同一个图层两次添加同key的动画,第二次会直接覆盖第一次的,这就是文档所说“每个唯一key仅能向图层添加一个动画”的含义。
二、多个视图用同一key的可行性
完全可行。因为key的作用域仅限于当前调用add方法的图层实例,不同视图的图层是相互独立的对象,它们的动画key空间完全隔离。
比如你有ViewA和ViewB,分别调用viewA.layer.add(anim, forKey: "jiggle")和viewB.layer.add(anim, forKey: "jiggle"),这两个动画各自独立存在于对应图层中,彼此不会覆盖或干扰。你可以单独移除ViewA的jiggle动画,完全不影响ViewB的。
三、额外注意点
- 如果在同一个图层内需要同时运行多个同类型动画,才需要给它们设置不同的key,或者传nil(此时系统会自动分配唯一key)。
- 统一的key命名反而便于代码维护:比如后续要批量控制所有视图的jiggle动画,只需遍历所有视图,调用各自图层的
removeAnimation(forKey: "jiggle")即可,不用维护一堆杂乱的key。
内容的提问来源于stack exchange,提问作者Bejil
相关产品推荐
相关产品推荐

