gpt4 book ai didi

objective-c - CALayer 从当前值淡出

转载 作者:太空狗 更新时间:2023-10-30 03:53:24 24 4
gpt4 key购买 nike

我的应用程序使用 CALayer 绘制 View 。更准确地说,它在 UIView 的顶层的子层上使用​​了 drawLayer:inContext: 方法。这是使连续 drawLayer:inContext: 绘图的“隐式”动画随时间逐渐淡入彼此的好方法。淡出动画发生得相当快,可能在 0.25 秒内,但要更改其持续时间,只需实现另一个名为 actionForLayer:forKey: 的委托(delegate)方法即可。在这个完美运行的示例实现中,默认持续时间延长到 2.0 秒:

- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:event];
animation.duration = 2.0;
return animation;

// or return nil for the default duration.
}

关于手头的问题。

如果您调用 [sublayer setNeedsDisplay] 的速度快于淡入淡出的完成时间,则每次新的淡入淡出时您都会看到一个突然的跳跃。从它的外观来看,正在进行的淡入淡出被取消,它的最终状态被用作新淡入淡出的起点。这可能并不令人惊讶,但视觉效果并不理想。

考虑从黑到白的十秒渐变,以及在开始后五秒触发的另一渐变到黑色的场景。动画将开始从黑色渐变为白色,但当它处于“半灰色”时,它会跳到全白,然后再次渐变为黑色。

有没有办法避免这种情况发生?我可以让图层从灰色淡化回黑色吗?是否有 CALayer 绘图等同于说 UIViewAnimationOptionBeginFromCurrentState(用于 UIView 动画)?

干杯。

最佳答案

层的动画只是层在动画时应该是什么样子的视觉表示。在 CA 中,当您从一种状态设置为另一种状态时,图层的整个状态会立即发生变化。创建一个表示层并显示动画,当动画完成时,实际层留在最后。

所以,我的猜测是,当你想从一种状态转换到另一种状态,而当前动画还没有完成时,你必须捕获动画的当前状态,然后使用这是您下一个动画的起点。

问题在于无法修改图层的当前动画。

在下面的帖子中,我捕获了动画的当前状态,将其设置为图层的当前状态,并将其用作开始动画的起始值。该帖子将此技术应用于动画的速度/持续时间,但也可以应用于您的场景。

https://stackoverflow.com/a/9544674/1218605

关于objective-c - CALayer 从当前值淡出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218650/

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