美文网首页
Masonry架构分析

Masonry架构分析

作者: 小胖子2号 | 来源:发表于2016-12-02 18:37 被阅读22次

第一步:导入masonry框架,再导入头文件

#import "Masonry.h"

第二步 :设置约束

核心代码:

   // 设置约束,一定要先把view添加上去,才能设置约束
 [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        
}];

注意点:使用约束布局步骤,先添加控件,再设置约束

- (void)viewDidLoad {
    [super viewDidLoad];
 
    // 创建红色view
    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    // 设置约束,一定要先把view添加上去,才能设置约束
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        // 链式编程思想特点:方法返回值必须要方法调用者
        // block:把需要操作的值当做block参数,block也需要返回值,就是方法调用者
       // 设置约束
        // 给make添加left,top约束,调用equalTo给这两个约束赋值
        make.left.top.equalTo(@10);
        make.right.bottom.equalTo(@-10);
        
    }];

效果图

19.png
补充:

mas_makeConstraints执行流程:
1.创建约束制造者MASConstraintMaker,绑定控件,生成了一个保存所有约束的数组
2.执行mas_makeConstraints传入进行的block
3.让约束制造者安装约束
* 1.清空之前的所有约束
* 2.遍历约束数组,一个一个安装

实例练习:写一个加法计算器

思路分析:

第一步:写一个自己的方法

  • 1、继承NSObject,建一个计算分类,提供计算方法
111.png
  • 2、模仿[redView mas_makeConstraints:^(MASConstraintMaker *make) { }

NSObject+Calculate.h中,设置自己的方法

11.png
/*
 * 方法设计:自己框架,最好添加一个方法前缀
 */

 // 将所有计算代码放到这里

+(int)zs_makeCalculate:(void(^)(CalculateManager *))block;
  • 3、 此时需要一个 管理者CalculateManager

    • 继承NSObject
    • 但没有实现里面具体方法,只是先创建
    • CalculateManager.h 导入到NSObject+Calculate.h
  • 4、来到viewController.m中,看外界是如何调用的

    • 传管理者mgr
    • 调用管理者的计算方法,所以需要在CalculateManager 里添加add方法
[NSObject zs_makeCalculate:^(CalculateManager *mgr){

  mgr.add(5)
}
    
  • 5、在CalculateManager 添加add方法,

CalculateManager.h中添加方法,同时提供一个属性result,将CalculateManager计算的结果保存在result

@property (nonatomic ,assign) int result;

-(CalculateManager *(^)(int))add;

CalculateManager.m中实现方法,如果不写return self;,只能(·)点一次,而且返回的类必须是CalculateManager本身,所以block返回的类型是CalculateManager

-(CalculateManager * (^)(int))add
{
    
    return ^(int value){
        
        _result +=value;
        return self;
        
    };
}

  • 6、上述一直没有调用block,在第四步时,只是传进去block。所以在NSObject+Calculate.m中实现调用方法
+(int)zs_makeCalculate:(void(^)(CalculateManager *))block

{
    // 创建文件管理者
    CalculateManager *mgr = [[CalculateManager alloc] init];
    
    block(mgr);
    
    return mgr.result;
  }  

相关文章

  • Masonry架构分析

    第一步:导入masonry框架,再导入头文件 #import "Masonry.h" 第二步 :设置约束 核心代...

  • Masonry是如何适配iOS11的

    iOS 源代码分析 --- Masonry 感谢:译者: @One @Draveness Masonry 是 Ob...

  • Masonry框架源码分析

    Masonry框架源码分析 相信大多数iOS开发者对Masonry框架并不陌生 , 本文是笔者通读Masonry的...

  • Masonry分析

    iOS 源代码分析----Masonry Masonry是OC自动布局的框架,简化了AutoLayout的写法。 ...

  • Masonry分析

    Masonry的链式调用非常的好用,那它是怎么实现的呢? 我们以- (NSArray*)mas_makeConst...

  • Masonry源码分析

    iOS 源代码分析 --- Masonry Masonry 是 Objective-C 中用于自动布局的第三方框架...

  • Masonry 源码分析

    Masonry 提供了简单方便的api ,供我们完成项目中的自动布局业务。 从使用的 api 开始讲 调用mas_...

  • Masonry源码分析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使...

  • Masonry源码分析

    Masonry源码其实非常简单,就是对AutoLayout的简单封装,但是使用中有几处要注意的地方,所以现在就Ma...

  • Masonry源码分析(下)

    前言 在上一篇-Masonry源码分析(上)文章中介绍了Masonry的文件结构、大致讲了一下类中的方法,希望大家...

网友评论

      本文标题:Masonry架构分析

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