8

我保留对我的引用NSLayoutConstraint

var flag = true
@IBOutlet weak var myConstraint: NSLayoutConstraint!

然后对于一些@IBAction我根据我的flag变量激活/停用:

@IBAction func tapped(sender: UIButton) {
    flag = !flag
    UIView.animateWithDuration(1.0) {
        if self.flag {
            NSLayoutConstraint.activateConstraints([self. myConstraint])
        } else {
            NSLayoutConstraint.deactivateConstraints([self. myConstraint])
        }
    }
}

但是当我再次调用我的操作时,我有一个错误unexpectedly found nil while unwrapping an Optional valuemyConstrain

更重要的是它没有动画。我究竟做错了什么?

我遵循 WWDC 2015 的教程:

在此处输入图像描述

4

1 回答 1

21

停用约束与调用removeConstraint:视图相同。请参阅文档。因此,当您删除具有weak引用的对象时,将导致对象释放。现在这个对象是nil并且激活它根本不会有任何效果。要解决这个问题,您需要对约束对象有一个强引用。

@IBOutlet strong var myConstraint: NSLayoutConstraint!
于 2015-07-11T17:13:32.823 回答