Masonry架构分析

第一步:导入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);
        
    }];

效果图

Masonry架构分析_第1张图片
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中,设置自己的方法

Masonry架构分析_第2张图片
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架构分析)