UIView.animate() 无法为视图设置动画的各种原因有哪些?
What are various reasons why UIView.animate() would fail to animate a view?
我这辈子都弄不明白为什么我的视图没有动画,所以我想这可能是因为一些我不知道的奇怪原因。有没有人对 UIView.animate()
无法正确设置动画的不常见方式有任何想法?我用来设置视图动画的方法是:
func animateView() {
print("1")
UIView.animate(withDuration: 5.0, delay: 2.0, options: [], animations: {
self.viewToAnimate.alpha = 0.0
print("2")
}, completion: {_ in
print("3")
})
}
更奇怪的是(在我看来),当我 运行 时,控制台输出
1
2
3
立即,并且不考虑 2.0 秒的延迟或 5.0 秒的持续时间...看起来我的“动画”是瞬时的,使我的视图立即消失,alpha 为 0。
有什么想法吗?
以下是我能想到的原因:
1- 您可以检查您的设备设置 General-> Accessibility-> Vision-> Reduce Motion
2- 您可以检查您调用的代码中是否有任何地方 UIView.setAnimationsEnabled(false)
https://developer.apple.com/documentation/uikit/uiview/1622420-setanimationsenabled
3- 在视图上调用动画之前尝试在视图上调用 layoutIfNeeded。这与动画的工作方式有关,它需要初始状态和结束状态,然后将两种状态之间的差异投射到时间图上。 https://www.objc.io/issues/12-animations/animations-explained/
4- 您没有在主线程上调用该方法,这会使它变得奇怪。尝试在 dispatch_main 块中调用它
我这辈子都弄不明白为什么我的视图没有动画,所以我想这可能是因为一些我不知道的奇怪原因。有没有人对 UIView.animate()
无法正确设置动画的不常见方式有任何想法?我用来设置视图动画的方法是:
func animateView() {
print("1")
UIView.animate(withDuration: 5.0, delay: 2.0, options: [], animations: {
self.viewToAnimate.alpha = 0.0
print("2")
}, completion: {_ in
print("3")
})
}
更奇怪的是(在我看来),当我 运行 时,控制台输出
1
2
3
立即,并且不考虑 2.0 秒的延迟或 5.0 秒的持续时间...看起来我的“动画”是瞬时的,使我的视图立即消失,alpha 为 0。
有什么想法吗?
以下是我能想到的原因:
1- 您可以检查您的设备设置 General-> Accessibility-> Vision-> Reduce Motion
2- 您可以检查您调用的代码中是否有任何地方 UIView.setAnimationsEnabled(false)
https://developer.apple.com/documentation/uikit/uiview/1622420-setanimationsenabled
3- 在视图上调用动画之前尝试在视图上调用 layoutIfNeeded。这与动画的工作方式有关,它需要初始状态和结束状态,然后将两种状态之间的差异投射到时间图上。 https://www.objc.io/issues/12-animations/animations-explained/
4- 您没有在主线程上调用该方法,这会使它变得奇怪。尝试在 dispatch_main 块中调用它