动画不适用于所有视图(iOS)
我有一些组件需要设置动画。我已经使用动画不适用于所有视图(iOS),ios,swift,uiview,autolayout,nslayoutconstraint,Ios,Swift,Uiview,Autolayout,Nslayoutconstraint,我有一些组件需要设置动画。我已经使用UIVIew.animate()很长时间了,没有任何问题。但是,在这种情况下,其中一个组件不会设置动画(特别是pullUpViewBottomCSTR),它只是将视图“跳转”到没有动画的位置(而其余组件按预期工作) 你能对此提供任何可能的解释吗(因为复制粘贴所有内容可能是垃圾邮件)。我很困惑 UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseOut, animations: {
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
中稍后,我将使用平移识别器,并根据需要更新约束(这就是我保留对它的引用的原因)。要设置动画的视图是
self
,但其垂直位置由该约束控制:
self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor)
使用以下命令激活此约束时:
self.pullUpViewBottomCSTR!.isActive = true
它被添加到self
和parentController.view
的最早共同祖先的约束中(如果一个视图是另一个视图的直系后代,则可能是其中一个视图)。为了设置该约束的动画,您需要对该最早的共同祖先调用layoutifneed()
您尚未显示由self
表示的视图如何与parentController.view
相关,但假设它是该视图的子视图,则可以使用以下工具设置其动画:
self.superview?.layoutIfNeeded()
在动画循环的内部
或者:
parentController.view.layoutIfNeeded()
也应该可以工作。要设置动画的视图是self
,但其垂直位置由此约束控制:
self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor)
使用以下命令激活此约束时:
self.pullUpViewBottomCSTR!.isActive = true
它被添加到self
和parentController.view
的最早共同祖先的约束中(如果一个视图是另一个视图的直系后代,则可能是其中一个视图)。为了设置该约束的动画,您需要对该最早的共同祖先调用layoutifneed()
您尚未显示由self
表示的视图如何与parentController.view
相关,但假设它是该视图的子视图,则可以使用以下工具设置其动画:
self.superview?.layoutIfNeeded()
在动画循环的内部
或者:
parentController.view.layoutIfNeeded()
应该也能正常工作。尝试编写self.view.layoutifneed()当前组件是UIView,而不是UIViewController。我已尝试执行以下操作:self.pullupView.layoutifneed()。似乎不起作用。我希望我不必这样做,因为我已经在superview上做了self.layoutIfNeeded()。但无论如何,不幸的是,它没有改变任何东西:/检查约束的初始值(如果不是0)是的,它得到了一个初始值。它是-400,它是隐藏的,我通过将它设置为0来显示它。这通常有效。为什么此约束要求代码>?尝试编写self.view.layoutifneed()当前组件是UIView,而不是UIViewController。我已尝试执行以下操作:self.pullupView.layoutifneed()。似乎不起作用。我希望我不必这样做,因为我已经在superview上做了self.layoutIfNeeded()。但无论如何,不幸的是,它没有改变任何东西:/检查约束的初始值(如果不是0)是的,它得到了一个初始值。它是-400,它是隐藏的,我通过将它设置为0来显示它。这通常有效。为什么此约束要求代码>?这起作用了。我很想知道为什么会这样。动画发生在UIView本身内部,因此其中涉及的所有子视图都包含在其中。为什么需要调用superview(在本例中为UIViewController)?非常感谢您抽出时间,如果您能为我指出正确的方向,让我能够理解为什么我在做我在这里做的事情,我将非常感激。再次感谢。我已经修改了答案以给出更好的解释。这很有效。我很想知道为什么会这样。动画发生在UIView本身内部,因此其中涉及的所有子视图都包含在其中。为什么需要调用superview(在本例中为UIViewController)?非常感谢您抽出时间,如果您能为我指出正确的方向,让我能够理解为什么我在做我在这里做的事情,我将非常感激。再次感谢。我修改了答案,以便给出更好的解释。