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
})
}
}
我想要一个视图从左侧出现和消失(取决于它是否对用户有一些有用的信息)。
我想使用约束来定位视图,所以我需要从情节提要中创建它。
在此代码段中,应在代码出现时将视图移开。 但是:当我转到下一个 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
})
}
}