UIView.animate() 无法为视图设置动画的各种原因都有哪些?
Posted
技术标签:
【中文标题】UIView.animate() 无法为视图设置动画的各种原因都有哪些?【英文标题】:What are various reasons why UIView.animate() would fail to animate a view?UIView.animate() 无法为视图设置动画的各种原因有哪些? 【发布时间】:2020-11-13 05:16:31 【问题描述】:对于我的一生,我无法弄清楚为什么我的视图不会动画,所以我想可能是因为一些我不知道的奇怪原因。有没有人对为什么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。
有什么想法吗?
【问题讨论】:
您需要提供minimal reproducible example,即从“在 Xcode 中创建新项目”开始,向我们提供重现问题的步骤列表。 @Sweeper 问题是,我的项目并不小,而且我真的不知道要包括什么(因为我不知道失败可能在哪里)。我似乎无法复制失败。这就是为什么我要寻求人们可以提出的通用想法……常见的陷阱领域。 好吧,Stack Overflow 帮不了你。学习使用分而治之的方法来隔离问题。 我想我会尽力而为......我猜没有什么奇怪的原因它不起作用? @Eric - 您是否更改了您的print()
声明以确认?正如我所说,如果要设置动画的目标属性 - 在这种情况下为 .alpha
- 已经相等(即已经为 0),则持续时间 和 都是延迟将被忽略。另一点:如果在调用animateView()
func 之前代码中的某处有UIView.setAnimationsEnabled(false)
,那么再一次,没有延迟或持续时间。您确实需要在代码中向后工作,并在执行之前弄清楚发生了什么。
【参考方案1】:
以下是我能想到的原因:
1-您可以检查您的设备设置常规->辅助功能->视觉->减少运动
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 或 CABasicAnimation,#3 是否适用? ios 上的所有动画都使用 Core Animation 运行。 UIKit 的基于块的动画方法只是一个方便的功能。 我接受了您的回答,因为它是最有帮助的——谢谢!不幸的是,我被禁止再问任何问题,因为显然我的问题没有得到足够的正面投票:/以上是关于UIView.animate() 无法为视图设置动画的各种原因都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章
当使用 UIView.animate 动画视图时,其他视图也不需要动画