- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对层动画中的 isRemovedOnCompletion 和 kCAFillModeForwards 有什么区别感到困惑。我正在阅读一本关于动画的书,其中建议仅使用 kCAFillModeForwards 来保持显示最后一帧。
但它对我不起作用,所以我进行了搜索,我可以看到其他人建议将 kCAFillModeForwards 和 isRemovedOnCompletion 结合使用保持最后一帧呈现。上一个解决方案对我有用,但我仍然很困惑,它们之间有什么区别?
最佳答案
您不应为此目的滥用 isRemovedOnCompletion
或 kCAFillModeForwards
。我看过这本书和很多例子都使用了这个“技巧”,但这是错误的。这是有史以来在互联网上传播的最严重的错误信息模因之一!这只是弥补你错误构建动画的一个拐杖。
例如,考虑这个简单的代码:
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
})
所有对 kCAFillModeForwards
和 isRemovedOnCompletion
的误用都是基于未能做到这一点。无论是在 View 动画还是显式层动画中,程序员都忽略了为动画属性赋予它在动画结束时将具有的值。所以困惑的程序员所做的就是作弊,将问题掩盖起来。 kCAFillModeForwards
意思是“动画结束时保持在它的端点”。将 isRemovedOnCompletion
设置为 false
意味着动画永不结束!这是一个糟糕的想法;它给渲染引擎带来了不必要的压力,完全是误导和不必要的。基本上,您是用动画位置覆盖 View /图层的真实位置。这是错误的。永远不要效仿那些例子。了解如何正确编写动画并执行此操作。
关于swift - isRemovedOnCompletion 和 kCAFillModeForwards 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914924/
当我尝试设置 animation.fillMode = kCAFillModeForwards 时,Xcode 无法编译并显示错误。 “使用未解析的标识符‘kCAFillModeForwards’”。
我对层动画中的 isRemovedOnCompletion 和 kCAFillModeForwards 有什么区别感到困惑。我正在阅读一本关于动画的书,其中建议仅使用 kCAFillModeForwa
当我使用 CAKeyframeAnimation 在屏幕上移动 UIImageView 时遇到间歇性问题。我希望 UIImageView 的位置保持在动画完成时结束的位置。此错误仅发生在某些起点和终点
我想在我的图标上进行轮换,这样它就会显示出前一个月的趋势。 如果我一个月前去,图标会跳回正常状态并上升或下降。 但我想要一个流畅的动画! 我尝试构建多个 CABasicAnimation 实例并且成功
我是一名优秀的程序员,十分优秀!