美文网首页
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架构分析

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