ViewController 导航后失去动画位置

ViewController looses animated position after navigation

我想要一个视图从左侧出现和消失(取决于它是否对用户有一些有用的信息)。

我想使用约束来定位视图,所以我需要从情节提要中创建它。

在此代码段中,应在代码出现时将视图移开。 但是:当我转到下一个 VC 时,我可以看到该视图再次出现在其原始位置,并且当从 VC 返回到初始 VC 时,实际上,恢复原位。

我试着将视图的 "state" 保存在一个变量中,使其在 VC 的各种生命周期中成为 appear/disappear,但没有任何帮助。

实现此目标的最佳方法是什么?

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myView: UIView!
    var boxIsVisible = false

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    var originalX:CGFloat = 0.0

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        originalX = self.myView.frame.origin.x
        if boxIsVisible == false {
           self.myView.center.x -= 200
        }
    }


    @IBAction func slideInAction(sender: AnyObject) {
        UIView.animateWithDuration(3.0, animations: {
            self.myView.center.x = self.originalX
                 self.boxIsVisible = true

        })
}

    @IBAction func slideOutAction(sender: AnyObject) {
        UIView.animateWithDuration(3.0, animations: {
            self.myView.center.x = -200
                 self.boxIsVisible = false
        })
    }
}

更新前导约束而不是视图的位置,因为您使用了自动布局。

class ViewController: UIViewController {
    @IBOutlet weak var myView: UIView!
    var boxIsVisible = false
    @IBOutlet weak var leadingConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        if boxIsVisible == false {
            leadingConstraint.constant = -myView.frame.width
        }
    }

    @IBAction func slideInAction(sender: AnyObject) {
        UIView.animateWithDuration(3.0, animations: {
            self.leadingConstraint.constant = -50
            self.view.layoutIfNeeded()
            self.boxIsVisible = true
        })
    }

    @IBAction func slideOutAction(sender: AnyObject) {
        UIView.animateWithDuration(3.0, animations: {
            self.leadingConstraint.constant = -self.myView.frame.width
            self.view.layoutIfNeeded()
            self.boxIsVisible = false
        })
    }
}