美文网首页
Masonry学习理解

Masonry学习理解

作者: XiaoYin | 来源:发表于2016-11-03 13:40 被阅读219次

    iOS中进行屏幕适配,使用的是AutoLayout。在纯代码中可以使用第三方Masonry添加约束进行适配,而使用xib也可以通过加约束来进行适配。关于Masonry介绍可参考资源Masonry官网

    Masonry框架介绍?(采用链式编程思想,代码可读性高)

    Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。 Masonry是一个用代码写iOS或os界面的库,可以代替Auto layout。Masonry的github地址

    Masonry使用?

    Masonry中文博客

    Masonry源码理解与探究?

    Masonry框架中的核心类:

    MASConstraintMASConstraintMakerView+MASAdditionsNSArray+MASAdditions

    Masonry核心类的探究:

    MASConstraint类:该类继承于NSObject,主要是一些约束方面的东西,比如top、left、right等等,并且该类定义了一些setter和getter方法,下面我截取了一部分该类中的代码

    简要分析下offset方法,该方法的具体实现如下:

    实在是佩服作者的思维,一般我们使用Block是作为参数,而该方法直接将Block作为返回值。认真理了下,该方法返回值是一个MASConstraint类型的Block而Block的返回值是id类型,在这里应该也是MASConstraint类型或者MASConstraint的子类类型吧,所以Block内部return self。没能理解这样做有什么好处~  或许这就是链式编程的思想吧,思考中·····

    MASConstraintMaker类:继承于NSObject类,主要是用于创建约束。定义了一些MASConstraint类型的属性值。如下:

    具体不再说明,大家可以去阅读Masonry的源码。

    View+MASAdditions类:为UIView添加的一个类目,添加了一些MASViewAttribute类型的属性,定义了一些添加约束的方法。如下:

    这些属性是我们使用Masonry为view添加约束经常用到的,下面我们来看看它内部的方法:

    如上,使用Masonry就知道常用的方法就有mas_makeConstraints,下面我们看看这个方法的实现:

    NSArray+MASAdditions:

    该类是NSArray的一个类目,定义如下:

    发现一个奇怪的地方,在View+MASAdditions这个类和NSArray+MASAdditions这个类都出现了mas_makeConstraints方法且返回值类型和参数类型都是一样的。处于好奇一定要看看它们有什么不一样。

    除了调用的对象不一样,不难发现它们的实现也是不一样的,虽然返回的都是NSArray类型对象,但是NSArray对象里面所装的东西也不一样,在UIView类目里面的mas_makeConstraints方法返回的数组所装的都是当前view对象映射的一组MASConstraint类型对象,而NSArray类目中mas_makeConstraints方法返回的数组对象所装的都是一组view关于各自映射的MASConstraint类型对象的数组,这样的解释有点儿绕~

    直接就是:

    在UIView的分类中mas_makeConstraints返回的是装着N(N>=0)个MASConstraint对象的数组;

    在NSArray的分类中mas_makeConstraints返回的是装着N(N>=0)个上面的数组的数组。

    个人总结

    在学习和使用Masonry过程中个人觉得比较值得学习的有以下几点:

    链式编程的思想,更利于代码的阅读和理解;

    将Block作为函数的返回值使用;

    以上是个人对于Masonry的一些学习和理解,若有错误的地方希望大家指出~ 也欢迎大家一起探讨和学习~

    相关文章

      网友评论

          本文标题:Masonry学习理解

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