我想要一个视图从左侧出现并消失(取决于它是否为用户提供了一些有用的信息)。
我想查看使用约束进行定位,因此我需要从故事板创建它。
在此代码段中,应该移开视图,以便何时显示代码。 但是:当我转到下一个VC时,我可以看到视图再次出现在其原始位置,当从VC返回到初始VC时,它实际上恢复了原始位置。
我拯救了"状态"变量中的视图,使其在VC的各个生命周期中出现/消失,但没有任何帮助。
实现这一目标的最佳方法是什么?
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
})
}
}
答案 0 :(得分:1)
更新前导约束而不是视图的位置,因为您使用自动布局。
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
})
}
}