我只想尝试在一些uiviews中制作动画,
viewWillAppear
UIView.animate
viewDidAppear
将其移回原位
`
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
label.center.x -= view.bounds.width
username.center.x -= view.bounds.width
password.center.x -= view.bounds.width
login.center.x -= view.bounds.width
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("view did appear")
UIView.animate(withDuration: 1) {
self.label.center.x += self.view.bounds.width
self.username.center.x += self.view.bounds.width
self.password.center.x += self.view.bounds.width
self.login.center.x += self.view.bounds.width
}
}
我做错了什么?
当我评论viewDidAppear
时,它对视图没有任何影响。 (它们在故事板中就位)
答案 0 :(得分:2)
Aeid,我想提供一种替代解决方案,让您动画是否有约束,如果可能的话。
我注意到你正在移动4个UI元素。我可能会建议你将它们组合成一个UIView(背景颜色清晰)。这样您只需要为一个UI元素设置动画。
我最喜欢的一种动画对象的方法是"转换"它。您可以应用3种变换:
每个UI对象都有.transform
属性。您使用CGAffineTransform
应用转换。 (CG =核心图形,仿射=保持平行关系。旋转,调整大小和重新定位不会扭曲或扭曲对象)
class ViewController: UIViewController {
@IBOutlet weak var loginView: UIView!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loginView.transform = CGAffineTransform(translationX: -view.bounds.width, y: 0)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(withDuration: 1) {
self.loginView.transform = .identity // Remove the transform
}
}
}
答案 1 :(得分:1)
您需要在该动画关闭中添加self.view.layoutIfNeeded()
。
UIView.animate(withDuration: 1) {
self.label.center.x += self.view.bounds.width
self.username.center.x += self.view.bounds.width
self.password.center.x += self.view.bounds.width
self.login.center.x += self.view.bounds.width
self.view.layoutIfNeeded()
}