美文网首页
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学习

    Masonry是一个轻量级的OC布局框架, 拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了,并具有...

  • masonry学习

    如果不加入MAS_SHORTHAND_GLOBALS那么equalTo代表的是一个函数 这个函数还没有组装数据结构...

  • masonry学习

    使用: 1,先创建一个View 2,添加到父视图上 3,设置约束 4,创建了一个新的View,添加到上一个view...

  • Masonry 学习

    现在iPhone手机屏幕越来越多, 屏幕适配也越来越重要. Masonry就是为屏幕适配而生的三方框架. Maso...

  • iOS Autolayout之Masonry解读

    Masonry Masonry是公认非常简洁优美的一款Autolayout框架 我推荐大家重点学习这个框架 我会把...

  • iOS - Masonry使用中的一些整理

    [置顶]iOS - Masonry使用中的一些整理 标签:iOS资源大全iOS常用方法iOS学习资料Masonry...

  • Masonry 介绍 2018-01-29

    介绍 Masonry 源码:https://github.com/Masonry/Masonry Masonry是...

  • 关于Masonry小记

    Masonry 源码:https://github.com/Masonry/Masonry Masonry是一个轻...

  • Masonry的用法

    Masonry 源码:https://github.com/Masonry/Masonry; 看一下Masonry...

  • Masonry实现简单动画

    1.安装Masonry库pod 'Masonry' 2.导入Masonry import

网友评论

      本文标题:Masonry学习

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