我保留了对我的NSLayoutConstraint的引用
var flag = true @IBOutlet weak var myConstraint: NSLayoutConstraint!
然后对于某些@IBAction我根据我的标志变量激活/停用:
@IBAction func tapped(sender: UIButton) { flag = !flag UIView.animateWithDuration(1.0) { if self.flag { NSLayoutConstraint.activateConstraints([self. myConstraint]) } else { NSLayoutConstraint.deactivateConstraints([self. myConstraint]) } } }
但是当我再一次调用我的动作时,在解开myConstrain的Optional值时,我意外地发现了一个错误nil.
更多的东西没有动画.我究竟做错了什么?
我按照WWDC 2015的教程:
解决方法
取消激活约束与调用removeConstraint:对于视图相同.请参阅
documentation.因此,当您删除具有弱引用的对象时,将导致对象取消分配.现在这个对象是nil并且激活它根本不会有任何影响.要解决此问题,您需要对约束对象有一个强引用.
@IBOutlet strong var myConstraint: NSLayoutConstraint!