动画不适用于所有视图 (iOS)
Animation doesnt work for all views (iOS)
我有一些组件需要制作动画。我已经使用 UIVIew.animate()
很长时间了,没有任何问题。但是在这种情况下,其中一个组件没有动画(具体来说 pullUpViewBottomCSTR
),它只是 "jumps" 视图到位而没有动画(而其余组件按预期工作)。
您能否对此提供任何可能的解释(因为复制粘贴所有内容可能是垃圾邮件)。我很困惑。
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 识别器并根据需要更新约束(这就是我保留对它的引用的原因)。
您绑定到动画的视图是 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()
应该也可以。
我有一些组件需要制作动画。我已经使用 UIVIew.animate()
很长时间了,没有任何问题。但是在这种情况下,其中一个组件没有动画(具体来说 pullUpViewBottomCSTR
),它只是 "jumps" 视图到位而没有动画(而其余组件按预期工作)。
您能否对此提供任何可能的解释(因为复制粘贴所有内容可能是垃圾邮件)。我很困惑。
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 识别器并根据需要更新约束(这就是我保留对它的引用的原因)。
您绑定到动画的视图是 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()
应该也可以。