为啥这些约束在动画时似乎滞后?

Posted

技术标签:

【中文标题】为啥这些约束在动画时似乎滞后?【英文标题】:Why do these constraints seem to lag when animated?为什么这些约束在动画时似乎滞后? 【发布时间】:2019-05-30 14:42:54 【问题描述】:

我正在使用UIView.animate 为我的约束设置动画。 drawerHeight 是一个约束变量。

代码如下:

drawerHeight?.constant = newHeight

UIView.animate(withDuration: 0.35, delay: 0, usingSpringWithDamping: 0.65, initialSpringVelocity: 2, options: .allowUserInteraction, animations: 
    self.superview?.layoutIfNeeded()
)

Here is a video of what the issue looks like.

查看视频的底部,底部边缘似乎滞后。 为什么这些约束在动画时似乎滞后?

这是一个自我回答的问题。这篇文章是为了帮助未来的人们发现他们做错了什么,以及如何快速修复它。

【问题讨论】:

【参考方案1】:

问题是约束被附加到比以前更深层次结构的视图上。使用layoutIfNeeded()时,应在包含约束的视图的父视图上调用。

在我的情况下,我将带有 drawerHeight 约束的视图放在另一个 UIView 中,这使它在层次结构中更深。

我解决了这个问题

self.superview?.superview?.layoutIfNeeded(),

而不是

self.superview?.layoutIfNeeded().

【讨论】:

以上是关于为啥这些约束在动画时似乎滞后?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 缓动动画在 iPad 上滞后

UIView 动画在设备上滞后

移动浏览器/视图中的按钮“点击”动画滞后

首次加载时动画滞后

拖动时为 UIView 设置动画

UIScrollView 动画滞后