当我在 UIView.animate 块中多次设置图层不透明度时,我看到了一个意外的初始条件:
movingView.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
movingView.backgroundColor = UIColor.blue
opacityView.backgroundColor = UIColor.red
opacityView.layer.opacity = 0.5
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
UIView.animate(withDuration: 3.0) {
opacityView.layer.opacity = 0
opacityView.layer.opacity = 1
movingView.frame = CGRect(x: 10, y: 120, width: 100, height: 100)
movingView.frame = CGRect(x: 190, y: 120, width: 100, height: 100)
}
}
当这段代码在操场上运行时,蓝色(底部)正方形动画从视图中间到右边缘,正如预期的那样,即使框架最初设置为左侧位置,也只使用最后一个值动画。
然而,红色方块不会直接从 0.5 不透明度动画到 1.0。它首先跳到 0.0 不透明度,没有动画,然后动画到 1.0 不透明度。
显然这是一个人为的情况,但是当我只为一组元素中的一个设置动画时遇到了这种情况,我将所有元素设置为不透明度 0,然后将我希望可见的动画设置为不透明度 1。但这并没有给出预期的动画。我可以通过从所有项目列表中删除我希望显示的项目来解决此问题。
但我很好奇,想了解这里发生了什么,为什么不透明度行为与动画帧值不同,以及是否有另一种更清洁的方法来解决这个问题。
============================================
为了清楚起见,我知道什么会使这项工作,但这是一个人为的例子,为了使它在现实世界中工作,我的代码变得不必要地复杂。我想知道为什么它会表现出这种行为,以及为什么它与动画帧不同。