微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cocoa – 我可以在将CAAnimation实例添加到图层后通过修改它来重用它吗?

这很有趣……我认为通过这样做

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实际上是制作动画的深层副本而不是增加引用计数吗?

解决方法

根据 the docs

- (void)addAnimation:(CAAnimation *)anim forKey:(Nsstring *)key

Add an animation object to the receiver’s render tree for the specified key.

Parameter anim:

The animation to be added to the render tree. Note that the object is
copied by the render tree,not referenced. Any subsequent
modifications to the object will not be propagated into the render
tree.

所以我认为重用相同的CAAnimation对象是安全的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐