Masonry源代码分析

使用Autolayout也有一段时间了,auto layout的基本概念非常简单,都是围绕约束进行的,API更是只有两个,但是使用起来感觉很麻烦。最近看到我们这边其他部门的应用使用了很多Masonry来处理UI,看起来非常清爽,链式调用看起来非常容易阅读,使用起来非常方便。但是这种之前ASI给的教训非常深刻,尤其这种大规模基础性地使用第三方开源库,需要确保可控才敢用,至少可以读懂代码并且能够局部优化代码,这是我认为的可控。尤其是这种非常基础的类库,会分布在各个模块之中,一旦出现不兼容,几乎是无法重写的。于是花了一两天时间,把这个代码研究了一下,发现比我想象中要好一些,代码设计地也非常简洁巧妙。

一. 源文件说明

1. MASConstraint: 这个是虚类是用来实现链式调用的父类。MASConstraint子类可以用来表示单独的一个NSLayoutConstraint约束(MASViewConstraint)或者一组NSLayoutConstraint约束(MASCompositeConstraint)。

2. MASConstraint+Private.h: 用于隐藏MASConstraint的私有方法,这些私有方法不会被外部调用者获取,但是类库内部却可以得到,这是个很好的设计模式,在继承中相当于protected。通过定义了较为重要的MASConstraintDelegate代理。

3. MASCompositeConstraint: 这个类用于表示一组NSLayoutConstraint约束,内部包含一个MASViewConstraint的数组做为childs。当调用这个类的类似equalTo或者install等方法的时候,这个类就会调用它的childs所对应的方法。这个类相当于一个MASViewConstraint容器,用于可以方便进行多个属性的操作,可以大大减少工作量。

4. MASViewConstraint:这个是Masonry DSL语法的核心解析类,用来表示对应NSLayoutConstraint,并将表示的属性在install的时候解析为对应的NSLayoutConstraint类,并加入到对应View中。

5. MASConstraintMaker: 这个是整个DSL过程的控制中心,控制整个添加过程。MASViewConstraint和NSCompositeConstraint都在这个maker中生成,maker并且会管理这些constraint的引用,在合适的时候,将这些constraint解析出来。重要的核心方法是实现了 MASConstraintDelegate 中的这些方法,这几个方法中是生成constraint的核心方法。注意,NSViewConstraint类如果没有加入到NSCompositeConstraint中,它的MASConstraintDelegate是maker;如果它是NSCompositeConstraint的child,则它的delegate是MASCompositeConstraint,但是最终还是会之中maker中的delegate方法。而MASCompositeConstraint的MASConstraintDelegate是maker。注意这个类提供的语法糖,用于方便地进行一组约束的操作,例如edges/size/center等属性。

6. View+MASAdditions:使用mas_makeConstraints/mas_updateConstraints/mas_remakeConstraints等核心入口方法来设置约束,最常用的的核心是mas_updateConstraints,一般来说,使用这个方法即可。

7. MASViewAttribute:用来封装UIView和它的NSLayoutAttribute属性,简单的hold这些引用。

8. MASLayoutConstraint:简单继承NSLayoutConstraint
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值