我有一些我需要制作动画的组件。我已经使用UIVIew.animate()
很长一段时间没有任何问题。但是在这种情况下,其中一个组件没有动画(特别是pullUpViewBottomCSTR
),它只是"跳跃"没有动画的视图到位(其余的按预期工作)。
你能为此提供任何可能的解释(因为复制粘贴所有东西可能是垃圾邮件)。我很困惑。
UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseOut, animations: {
self.pullUpViewBottomCSTR!.constant = 0
self.mainImagePullUpBottomCSTR.constant = 0
self.obscuringFadeEffectView.alpha = 0;
self.layoutIfNeeded()
}) { (completed) in
//
}
我认为我没有任何相互矛盾的约束。
此代码位于UIView
组件中,而不是UIViewController
。
我在viewController中加载此组件。我曾经在UIViewController中拥有整个东西,我认为它曾经正常工作,直到我将它移动到相应的.xib和.swift文件。
更新
最初添加约束如下。 (这可能是相关的)
self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor)
self.pullUpViewBottomCSTR!.isActive = true;
self.pullUpViewBottomCSTR!.constant = 0
我稍后使用pan识别器并根据需要更新约束(这就是为什么我要保留对它的引用)。
答案 0 :(得分:2)
您要制作动画的视图为self
,但其垂直位置受此约束控制:
self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor)
使用以下命令激活此约束时
self.pullUpViewBottomCSTR!.isActive = true
它被添加到self
和parentController.view
的最早共同祖先的约束中(如果一个是另一个的直接后代,则可能是这些视图之一)。为了激活该约束,您需要在最早的共同祖先上调用layoutIfNeeded()
。
您尚未显示self
代表的视图与parentController.view
的关系,但假设它是该视图的subview
,那么您可以使用以下内容为其设置动画:
self.superview?.layoutIfNeeded()
在动画循环内部。
可替换地:
parentController.view.layoutIfNeeded()
应该也可以。