美文网首页
Masonry学习

Masonry学习

作者: 崔又淇 | 来源:发表于2023-05-14 19:33 被阅读0次

    链式编程:

    首先来看一个简单的链式调用例子:
    我们可以通过点语法(getter方法)的方式调用

    点语法.png

    如果我们想要实现self.eat.work.play这种我们只要返回self就可以了。

    调用.png

    如果想要传参数的话,可以将block作为方法的返回值

    block做参数.png

    Masonry源码学习:

    Masonry其实就是封装了系统的NSLayoutConstraint的方法,简化了代码。

    Masonry的使用.png

    mas_makeConstraints方法在View的扩展的方法中,在方法中初始化了maker对象,将view传给maker中。maker的初始化方法中会保存view,并初始化一个数组保存约束。
    然后调用了传入的block方法。

    源码.png

    当调用make.left的方法时,会调用以下图中的方法

    源码.png

    其实就是调用maker的constraint方法:
    MasViewAttribute是约束属性,对象中保存了约束属性和view,对象中有判断约束是否相同的方法。
    MASViewConstraint是视图约束,持有约束属性。
    这时,如果constraint是nil的话,就设置constraint.delegate为maker。
    这里会返回constraint对象。

    核心方法.png

    如果再次调用.top时,其实调用的是MASViewConstraint的方法。
    这里的self.delegate = maker;其实调用的还是maker的方法。核心方法。
    上图核心方法中,会将这次约束和上次的约束方法数组中,生成组合视图约束对象。然后再将约束的代理设置为maker。返回组合约束对象。之后返回组合约束对象。

    源码.png

    视图对象添加约束的方法如下,代理依旧是maker。这里用了MASConstraint对象,单个视图和组合视图都继承于该对象。
    这里最后还是调用maker代理方法。

    组合视图添加约束.png

    install 方法调用MASViewConstraint 的install方法,就是将系统约束添加到视图上。

    源码.png 源码.png

    学习:

    1. 链式编程,可读性高,代码简洁,易维护。
    2. 面向对象:继承、封装、多态。
    3. 工厂模式
    4. delegate: 使用代理可以达到核心代码的重用。

    相关文章

      网友评论

          本文标题:Masonry学习

          本文链接:https://www.haomeiwen.com/subject/qgvpsdtx.html