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 块中调用它