Ios Can';t为具有子视图控制器的两个容器视图的位置更改设置动画

Ios Can';t为具有子视图控制器的两个容器视图的位置更改设置动画,ios,swift,cocoa-touch,uikit,Ios,Swift,Cocoa Touch,Uikit,我在self.view中有两个视图,它们是容器视图(通过故事板:每个视图在viewDidLoad中都有一个嵌入序列,用于加载各自的子视图控制器)。它们被称为self.leftPane和self.righpane。我正在使用自动布局 我想为self.leftPane的位置更改设置动画,因为它从x=0移动到x=(负数)。我基本上是想用一种简单的方式在左边做一份汉堡包菜单 @IBOutlet weak var leftPane: UIView! // has child view controller

我在self.view中有两个视图,它们是容器视图(通过故事板:每个视图在viewDidLoad中都有一个嵌入序列,用于加载各自的子视图控制器)。它们被称为self.leftPane和self.righpane。我正在使用自动布局

我想为self.leftPane的位置更改设置动画,因为它从x=0移动到x=(负数)。我基本上是想用一种简单的方式在左边做一份汉堡包菜单

@IBOutlet weak var leftPane: UIView! // has child view controller embedded
@IBOutlet weak var rightPane: UIView! // has child view controller embedded

        // in/after viewDidAppear
        self.leftPaneLeftConstraint.constant = 0 - self.leftPane.frame.size.width + 20.0

        UIView.transition(with: self.leftPane, duration: 1.0, options: [], animations: {
            self.leftPane.layoutIfNeeded()
        }, completion: { (finished) in
            self.leftPaneIsFull = false
        })
问题是没有动画——它只是跳跃我尝试了使用不同视图的UIView.transition,以及不同的UIView.animate风格,所有这些都具有相同的效果(没有实际的动画)


我错过了什么?谢谢

您应该使用UIView.animate而不是UIView.transition。我写下了代码示例。您是否尝试使用此代码

 @IBOutlet weak var leftPane: UIView! // has child view controller 
  embedded
 @IBOutlet weak var rightPane: UIView! // has child view controller embedded

   // in/after viewDidAppear
   UIView.animate(withDuration: 1.0, animations: {

        self.leftPaneLeftConstraint.constant = 0 - self.leftPane.frame.size.width + 20.0
        self.view.layoutIfNeeded()
    }, completion: { (success) -> Void in

           //You can write something you want

           })
        }
    })

享受它:)

你应该使用UIView.animate而不是UIView.transition。我写下了代码示例。你在尝试这段代码吗

 @IBOutlet weak var leftPane: UIView! // has child view controller 
  embedded
 @IBOutlet weak var rightPane: UIView! // has child view controller embedded

   // in/after viewDidAppear
   UIView.animate(withDuration: 1.0, animations: {

        self.leftPaneLeftConstraint.constant = 0 - self.leftPane.frame.size.width + 20.0
        self.view.layoutIfNeeded()
    }, completion: { (success) -> Void in

           //You can write something you want

           })
        }
    })

享受它:)

在您回答之前,我已经想好了,问题不在于转换(正如我提到的,我也尝试过UIView.animate)。问题是layoutIfNeeded()在视图层次结构中没有被调用到足够高的位置,即需要执行
self.view.layoutIfNeeded()
我很高兴您解决了这个问题。感谢rep.@xaphodI在您回答之前解决了这个问题,问题不是转换(正如我提到的,我也尝试过UIView.animate)。问题是layoutIfNeeded()在视图层次结构中没有被调用到足够高的位置,即需要执行
self.view.layoutIfNeeded()
我很高兴您解决了这个问题。感谢您的代表@xaphod