gpt4 book ai didi

swift - ViewController 在导航后丢失动画位置

转载 作者:行者123 更新时间:2023-11-30 10:01:50 25 4
gpt4 key购买 nike

我希望 View 从左侧出现和消失(取决于它是否为用户提供一些有用的信息)。

我想使用约束来定位 View ,因此我需要从 Storyboard创建它。

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

我尝试过将 View 的“状态”保存在变量中,使其在 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
})
}
}

最佳答案

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

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
})
}
}

关于swift - ViewController 在导航后丢失动画位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com