介绍
通过可视化方法,使用outlets来控制约束,实现动画确实非常方便也非常容易,但是有时你不可能把UI上所有元素都做outlet,这会有巨大的工程量。也许你希望通过代码来增减、调整约束
由于这些原因,你将需要在运行时检查已存在的约束,并且用代码让它们动起来。
Demo
接着我们上一个Demo,在actionToggleMenu()
方法中添加
for con in titleLabel.superview!.constraints { print(" -> \(con.description)\n")
}
通过这么一段代码,我们遍历了menu bar view的所有约束并输出在了命令行
这样的输出显然很混乱,那我们看出哪个我们要做调整的约束呢
比如我们如下的约束:UIView:...centerX == UILabel:...'Select Item'.centerX
这显然是UIView UILabel之间的约束、它的description也包括了label的current text
centerX让我们判断出来,这个约束与horizontally centers有关,这样就能知道这个约束是做什么的了
Animating UILabel constraints
随后在actionToggleMenu(_:)方法中,判断开关状态后,添加如下代码:
for constraint in titleLabel.superview!.constraints {
if constraint.firstItem as? NSObject == titleLabel &&
constraint.firstAttribute == .CenterX {
constraint.constant = isMenuOpen ? -100.0 : 0.0
continue
}
}
这样我们便找到了我们要修改的约束并且改变了它的值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。