这很有趣......我认为通过这样做
CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"opacity"];
a.fromValue = [NSNumber numberWithFloat:0.];
a.toValue = [NSNumber numberWithFloat:1.];
a.duration = .4;
a.fillMode = kCAFillModeBoth;
a.removedOnCompletion = NO;
CGFloat timeOffset = 0;
for(CALayer* layer in layers)
{
a.beginTime = [someCommonSuperView.layer convertTime:CACurrentMediaTime()fromLayer:nil] + timeOffset;
[layer addAnimation:a forKey:nil];
timeOffset += .4;
}
我实际上总是修改相同的CABasicAnimation的beginTime,只是递增其引用计数。因此,我不会一个接一个地逐渐消失,而是应该弄乱所有这些层的开始时间,可能导致所有这些层在最后一个时刻刚出现。但上面的代码实际上似乎有效,因为这些层依次淡出。
以这种方式重用动画是否有意义?为了不在每次传递中创建它的新实例?
addAnimation实际上是在制作动画的深层副本而不是增加引用次数吗?
答案 0 :(得分:8)
根据the docs:
- (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key
将动画对象添加到接收器的渲染树中以获取指定的键。
参数
anim
:要添加到渲染树的动画。请注意,对象是 由渲染树复制,未引用。任何后续的 对象的修改不会传播到渲染中 树。
所以我说重复使用相同的CAAnimation
对象是安全的。