如何在 Swift 中为 NSLayoutConstraint 设置动画?
How do I animate a NSLayoutConstraint in Swift?
我想为 UIImageView 设置动画。我在 viewDidLoad
中声明了一个 NSLayoutConstraint
并使用了这个代码:
UIView.animate(withDuration: 1) {
myConstraint.constant = 100
self.view.layoutIfNeeded()
}
为什么我的图像不动?
当您点击 viewDidLoad
时,尚未应用约束引擎并且尚未建立视图的起始位置。因此,请随意在 viewDidLoad
中添加原始约束,但您会希望将 animateWithDuration
推迟到过程的后期(例如 viewDidAppear
)。
例如,假设您在 Interface Builder (IB) 中添加了一些约束。您可以通过 control 添加对它的 @IBOutlet
引用 - 从 Interface Builder 左侧面板的文档大纲中的约束向下拖动到助理编辑器:
既然您已经引用了该约束,您现在可以通过编程方式更改该约束的 constant
值(但是,同样,在 viewDidAppear
中执行此操作,而不是 viewDidLoad
, 如果你想在呈现视图时看到这个动画):
@IBOutlet weak var topConstraint: NSLayoutConstraint!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
topConstraint.constant = 100
UIView.animate(withDuration: 2) {
self.view.layoutIfNeeded()
}
}
以编程方式创建的约束的过程相同。只需保存对约束的引用,然后在 viewDidAppear
中更新 constant
,然后将对 layoutIfNeeded()
.
的调用设置为动画
请在 viewDidAppear 中设置约束并尝试以下更正
myConstant = 100
myConstraint.constant = myConstant
UIView.animateWithDuration(1, animations: {
self.view.layoutIfNeeded()
}, completion: {finished in })
我想为 UIImageView 设置动画。我在 viewDidLoad
中声明了一个 NSLayoutConstraint
并使用了这个代码:
UIView.animate(withDuration: 1) {
myConstraint.constant = 100
self.view.layoutIfNeeded()
}
为什么我的图像不动?
当您点击 viewDidLoad
时,尚未应用约束引擎并且尚未建立视图的起始位置。因此,请随意在 viewDidLoad
中添加原始约束,但您会希望将 animateWithDuration
推迟到过程的后期(例如 viewDidAppear
)。
例如,假设您在 Interface Builder (IB) 中添加了一些约束。您可以通过 control 添加对它的 @IBOutlet
引用 - 从 Interface Builder 左侧面板的文档大纲中的约束向下拖动到助理编辑器:
既然您已经引用了该约束,您现在可以通过编程方式更改该约束的 constant
值(但是,同样,在 viewDidAppear
中执行此操作,而不是 viewDidLoad
, 如果你想在呈现视图时看到这个动画):
@IBOutlet weak var topConstraint: NSLayoutConstraint!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
topConstraint.constant = 100
UIView.animate(withDuration: 2) {
self.view.layoutIfNeeded()
}
}
以编程方式创建的约束的过程相同。只需保存对约束的引用,然后在 viewDidAppear
中更新 constant
,然后将对 layoutIfNeeded()
.
请在 viewDidAppear 中设置约束并尝试以下更正
myConstant = 100
myConstraint.constant = myConstant
UIView.animateWithDuration(1, animations: {
self.view.layoutIfNeeded()
}, completion: {finished in })