Masonry的实现原理

核心
是基于NSLayoutConstraint自动布局来实现的

NSLayoutConstraint如何进行约束布局?
1、要实现自动布局,必须把该属性设置为NO
view.translatesAutoresizingMaskIntoConstraints = NO

2、然后使用 addConstraint添加约束

[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeRight
multiplier:1
constant:-10]];

而Masonry具体的实现呢?
1、MASViewConstraint定义具体的约束
2、链式调用实际上是在添加约束,通过代理(MASConstraintMaker)进行约束的添加,最后调用install为视图添加约束。
3、MASConstraintMaker的install最终还是会调用每个MASViewConstraint的install
MASViewConstraint的结构如下:

 

大致的过程
先执行block内的链式语法通过maker定义约束和添加到maker的约束数组里面,最后再调用maker的install真正为视图添加约束,遍历约束数组通过 [self.installedView addConstraint:layoutConstraint]添加约束

总结(摘抄自底下的参考博客,觉得高度概括了整个实现方案)
1.MASConstraintMaker作为工厂,生产一个个MASViewConstraint约束对象。
2.MASViewConstraint和MASCompositeConstraint继承于抽象类MASConstraint,为我们提供了高度封装的约束对象
3.View+MASAdditions这个UIView的扩展是Masonry与外界交互的接口类,这样很好的把复杂的约束逻辑封装在内部管理,又提供了简单的API供用户使用。

参考博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值