Masonry分析

Masonry的链式调用非常的好用,那它是怎么实现的呢?

我们以- (NSArray*)mas_makeConstraints:(void(NS_NOESCAPE^)(MASConstraintMaker*make))block;为例进行分析:

  [redViewmas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.top.equalTo(@10);

        make.right.bottom.equalTo(@-10);

    }];

1.mas_makeConstraints内部首先把目标视图和约束制造者进行绑定:

MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];

2.然后调用了block,把约束制作者传递了过来

block(constraintMaker);

3.添加约束

make.left.top.equalTo(@10):链式调用把需要添加的约束添加到约束制造者的数组中,之后统一进行安装,每次都返回MASConstraint对象;

4.equalTo(@-10)的用法:

equalTo(@-10)其实分为了两步,一步是返回了block,而是对block进行调用;

4.1 equalTo 会返回一个block

- (MASConstraint * (^)(id))equalTo {     return ^id(id attribute) {                                                                                                                                   return self.equalToWithRelation(attribute, NSLayoutRelationEqual);     };                                                                                                                          }

4.2 MASConstraint * (^)(id) 就是返回的那个block,之后进行调用;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们先来看看是如何开始使用Masonry的,一般我们使用这个布局框架的时候,都会调用以下代码。。。。。 [self...
    smile小芳阅读 1,214评论 0 0
  • 转载:https://www.cnblogs.com/liutingIOS/p/5406858.html 一、Ma...
    JasonYuan123阅读 1,441评论 0 1
  • 一、Masonry介绍 之前我们在屏幕适配的章节中学习过AutoLayout的使用,但那都是在可视化界面上进行添加...
    无沣阅读 2,170评论 0 1
  • Autolayout就像一个知情达理,善解人意的好姑娘,可惜长相有点不堪入目,所以追求者寥寥无几。所幸遇到了化妆大...
    小笨狼阅读 24,065评论 28 227
  • 因为之前开发时都是在xib文件中添加约束,或者代码中计算frame并没有接触过Masonry,现在写篇博客来归纳总...
    口子窖阅读 6,576评论 1 4