一尘不染

如何在Swift中为NSLayoutConstraint设置动画?

swift

我想制作一个UIImageView动画。我声明了NSLayoutConstraintin
viewDidLoad并使用了以下代码:

UIView.animate(withDuration: 1) {
    myConstraint.constant = 100
    self.view.layoutIfNeeded()
}

为什么我的图像不动?


阅读 506

收藏
2020-07-07

共1个答案

一尘不染

在您按下时viewDidLoad,约束引擎尚未
应用,并且视图的起始位置尚未建立。
因此,可以随时在中添加原始约束viewDidLoad,但是您
需要将推迟到animateWithDuration该过程的后面(例如
viewDidAppear)。

例如,假设您在InterfaceBuilder(IB)中添加了一些约束。您可以通过以下方式添加@IBOutlet对它的control引用:从InterfaceBuilder 左面板的文档大纲中的约束向下拖动到助手编辑器

现在,您已经有了对该约束的引用,现在可以以编程方式更改该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()。

2020-07-07