gpt4 book ai didi

swift - isRemovedOnCompletion 和 kCAFillModeForwards 有什么区别

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:11 24 4
gpt4 key购买 nike

我对层动画中的 isRemovedOnCompletionkCAFillModeForwards 有什么区别感到困惑。我正在阅读一本关于动画的书,其中建议仅使用 kCAFillModeForwards 来保持显示最后一帧。

但它对我不起作用,所以我进行了搜索,我可以看到其他人建议将 kCAFillModeForwards 和 isRemovedOnCompletion 结合使用保持最后一帧呈现。上一个解决方案对我有用,但我仍然很困惑,它们之间有什么区别?

最佳答案

您不应为此目的滥用 isRemovedOnCompletionkCAFillModeForwards。我看过这本书和很多例子都使用了这个“技巧”,但这是错误的。这是有史以来在互联网上传播的最严重的错误信息模因之一!这只是弥补你错误构建动画的一个拐杖。

例如,考虑这个简单的代码:

let opts : UIView.AnimationOptions = .autoreverse
let xorig = self.v.center.x
UIView.animate(withDuration:1, delay: 0, options: opts, animations: {
self.v.center.x += 100
}, completion: nil
)

View 以动画方式向右移动 100 点,然后以动画方式移动 100 点回到其原始位置 — 然后 100 点回到右侧。原因是我们分配给 View 中心 x 的最后一个实际值是向右 100 点,所以当动画结束并且“动画电影”被甩掉时, View 仍然显示向右坐 100 点。

解决方案是将 View 移回其原始位置,由您自己完成!您可以在 completion: 函数中执行此操作:

let opts : UIView.AnimationOptions = .autoreverse
let xorig = self.v.center.x
UIView.animate(withDuration:1, delay: 0, options: opts, animations: {
self.v.center.x += 100
}, completion: { _ in
self.v.center.x = xorig
})

所有对 kCAFillModeForwardsisRemovedOnCompletion 的误用都是基于未能做到这一点。无论是在 View 动画还是显式层动画中,程序员都忽略了为动画属性赋予它在动画结束时将具有的值。所以困惑的程序员所做的就是作弊,将问题掩盖起来。 kCAFillModeForwards 意思是“动画结束时保持在它的端点”。将 isRemovedOnCompletion 设置为 false 意味着动画永不结束!这是一个糟糕的想法;它给渲染引擎带来了不必要的压力,完全是误导和不必要的。基本上,您是用动画位置覆盖 View /图层的真实位置。这是错误的。永远不要效仿那些例子。了解如何正确编写动画并执行此操作。

关于swift - isRemovedOnCompletion 和 kCAFillModeForwards 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914924/

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