gpt4 book ai didi

iphone - CAAnimations,并更新图层树

转载 作者:行者123 更新时间:2023-11-29 03:53:03 27 4
gpt4 key购买 nike

这个苹果文档 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html#//apple_ref/doc/uid/TP40004514-CH3-SW3

展示如何使用显式动画来为某些属性设置动画,然后立即在图层上设置该属性,以便当显式动画完成时,属性的最终值是正确的。

但是,直接在图层上设置属性也会导致隐式动画。我觉得我的程序中存在这样的错误,隐式动画和显式动画都在运行。

有人可以解释一下这是如何工作的吗?示例代码中,设置显式动画时是否会忽略隐式动画?

--- 更新 ---

所以我具体看到的问题是我有一个动画来改变图层的位置。它看起来与苹果示例代码基本相同

CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"position"];
anim.fromValue = startValue;
anim.toValue = endValue;
anim.duration = 1.0;
[theLayer addAnimation:anim forKey:@"myAnimation"];

// Change the actual data value in the layer to the final value.
position.position = endValue; // As a CGPoint

我观察到的问题是,首先我看到位置变化很快(我猜这是隐式动画),然后它变慢了(这是我的动画)。

我刚刚注意到我的代码中不同的一件事是,我给显式动画的 ID 是“myAnimation”,而不是“position”。但这又引出了另一个问题,如果你给两个动画相同的 ID(苹果示例代码中的“不透明度”),并且隐式动画设置为第二,为什么那个动画没有胜出?

最佳答案

在其他人遇到这种情况的情况下,我的问题是两个动画被添加到我的图层中。它们都对位置属性进行动画处理,但它们具有不同的 ID,因此两者都在运行。

我通过将隐式动画包装在关闭操作的事务中解决了我的问题。

[CATransaction begin];
[CATransaction setDisableActions:YES];
theLayer.position = endValue;
[CATransaction commit];

关于iphone - CAAnimations,并更新图层树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16842805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com