gpt4 book ai didi

ios - 使用负速度恢复 CABasicAnimation?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:40 25 4
gpt4 key购买 nike

我使用以下代码恢复我的 CABasicAnimation:

    CFTimeInterval pausedtime = layer.timeOffset;
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = [layer convertTime:CACurrentMediaTime() toLayer:nil] - pausedTime;

这很简单。在this的最后文章作者指出,负 speed 值动画反转。我不明白在这种情况下 timeOffsetbeginTime 应该是什么样子?

P.S. 我知道我可以通过从表示层获取当前值并设置 toValue 和 fromValue 来反转动画。我想弄清楚速度属性是否可行。

最佳答案

使用 .timeOffset = 0 向后恢复动画时会遇到问题。 .timeOffset = 0 表示动画开始。因此,以反向速度动画将立即完成。因此,例如,如果您有在完成时自动删除的动画 — 它不会播放任何内容:只会消失。

CAAnimation 的文档确实很差。他们的恢复示例仅使用 .beginTime 属性。我们可以使用 .timeOffset 属性来代替。

<强>1。将层的开始时间设置为其容器的当前时间:

// set begin time to current time of superlayer to start immediately
let sTime = layer.superlayer?.convertTime(CACurrentMediaTime(), to: nil) ?? 0
layer.beginTime = sTime

<强>2。使用 .timeOffset 转到要继续播放的动画时刻:

// set starting point of animation to the current "progress"
layer.timeOffset = progress

progress 是您想要从动画持续时间恢复的时间位置。即,如果您的动画持续时间为 0.6 — 那么 0 ≤ progress ≤ 0.6

<强>3。反向启动动画:

// set negative speed to have reverse animation
layer.speed = -1.0

如果需要,不要忘记在完成时删除动画。

这是实际如何应用这些设置的图片:

CALayer timing with reverse speed explained.

关于ios - 使用负速度恢复 CABasicAnimation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338092/

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