Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动画不适用于所有视图(iOS)_Ios_Swift_Uiview_Autolayout_Nslayoutconstraint - Fatal编程技术网

动画不适用于所有视图(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

  • 我正在将此组件加载到viewController中。我以前把整个东西都放在UIViewController中,我认为在我将它移动到相应的.xib和.swift文件之前,它一直工作正常

  • 更新:

    最初添加的约束如下所示。(这可能是相关的)


    稍后,我将使用平移识别器,并根据需要更新约束(这就是我保留对它的引用的原因)。

    要设置动画的视图是
    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)?非常感谢您抽出时间,如果您能为我指出正确的方向,让我能够理解为什么我在做我在这里做的事情,我将非常感激。再次感谢。我修改了答案,以便给出更好的解释。