我想制作一个UIImageView动画。我声明了NSLayoutConstraintin viewDidLoad并使用了以下代码:
UIView.animate(withDuration: 1) { myConstraint.constant = 100 self.view.layoutIfNeeded() }
为什么我的图像不动?
在您按下时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()。