当使用 UIView.animate 动画视图时,其他视图也不需要动画
Posted
技术标签:
【中文标题】当使用 UIView.animate 动画视图时,其他视图也不需要动画【英文标题】:When animating view with UIView.animate other views are also needlessly animated 【发布时间】:2018-06-07 11:09:41 【问题描述】:我想知道为什么我的自定义 TableViewCells 中的视图会受到动画的影响,而动画应该只为浮动寻呼机中的 2 个视图设置动画(这甚至不在 TableView 的视图层次结构中。..
UIView.animate(withDuration: 0.3)
self.stateIndicator.isHiddenInStackView = true
self.loaderIndicator.isHiddenInStackView = false
当我注释掉动画块时,一切都会停止动画。
附加的 GIF 描述了所有内容(蓝色视图获得动画角半径,徽章“飞入”而不是仅仅出现):
UIView.animate 奇怪的行为
任何帮助或提示将不胜感激:)。
问候汤姆。
【问题讨论】:
什么是isHiddenInStackView
?该属性的设置器是否在做某事?
它只是“安全隐藏取消隐藏” var isHiddenInStackView: Bool get return isHidden set if isHidden != newValue isHidden = newValue “错误是隐藏和显示视图在堆栈视图中是累积的。奇怪的 Apple 错误。来源:***.com/a/45599835/9413528
我不认为这个错误是相关的。它只是说您必须多次设置isHidden
才能产生影响。
我的猜测是,由于您的寻呼机正在获取有关表格视图的数据,它可能会以某种方式触发表格视图重新加载。如果该表重新加载是由分页器间接触发的,那么它的更改可能会被动画块捕获。
@ABeard89 在表格视图从后台线程获取更多数据后,我正在更新寻呼机。所以 pager 对表格视图根本不做任何事情。
【参考方案1】:
在块中写下你不想动画的东西
UIView.performWithoutAnimation
//Write your code here
【讨论】:
成功了,但我还是不明白为什么会这样?现在我不得不在很多地方使用 performWithoutAnimation.. 有时会发生,假设您正在制作动画,并且在提交该动画之前启动了另一个 UI 操作,该操作将由于该动画块而自动制作动画 谢谢你的帮助,我会坚持下去的。【参考方案2】:我在主队列中制作我的动画并且它有效。 例如
DispatchQueue.main.async
//Write animation code here
【讨论】:
以上是关于当使用 UIView.animate 动画视图时,其他视图也不需要动画的主要内容,如果未能解决你的问题,请参考以下文章
UIView.animate() 无法为视图设置动画的各种原因都有哪些?