首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CATransaction动画与setDisableActions:是的

CATransaction动画与setDisableActions:是的
EN

Stack Overflow用户
提问于 2014-04-25 15:53:03
回答 1查看 2.9K关注 0票数 3

我有许多CALayer/CAShapeLayer/CATextLayer对象需要同时修改,但是只有一个子集应该是有生命的。对于那些我不想动画的层,我将更新包装在CATransaction调用中如下所示:

代码语言:javascript
复制
- (void) setPlayerName:(NSString *)playerName
{
    _playerName = playerName;

    [CATransaction begin];
    [CATransaction setDisableActions:YES];

    [self updateNameLayer]; // Layer property updates happen in here

    [CATransaction commit];

    // Update the screen
    [self setNeedsLayout];
    [self setNeedsDisplay];
}

直到我在[CATransaction setDisableActions:YES]; begin/commit调用之外使用了一个CATransaction,我才意识到动画可能会在同时被设置为动画的不同对象上受到影响。在这种情况下,我对该更新的所有动画都被禁用。

我认为,解决方案是在CATransaction begin/commit调用中显式包装每个更新,以本地化对该事务的setDisableActions:调用。即使这样做了,它仍然似乎是所有的动画或一无所有。在我看来,我对CATransaction的工作方式没有足够的理解。

什么是正确的方法来处理几个同时进行的CALayer隐式动画属性更新,但只对其中一个子集进行动画化?这些更新调用和层分散在多个对象上。

EN

回答 1

Stack Overflow用户

发布于 2014-04-25 16:22:37

当然,你想做的事是可行的。例如:

代码语言:javascript
复制
    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    self.lay1.position = CGPointMake(300,300);
    [CATransaction commit];

    self.lay2.position = CGPointMake(300,300);

这两个层移动到相同的位置,但其中一个是动画的,另一个不是。

如果没有进一步的信息,您的代码不能按您想要的方式工作。(例如,您可能会发出一层相互矛盾的命令,从而导致动画被取消。)但你绝对是在合法的轨道上。但是,如果您觉得这太令人望而生畏,我建议您放弃隐式层动画,而使用CABasicAnimation和朋友。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23297771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档