美文网首页iOS进阶
Masonry 链式编程

Masonry 链式编程

作者: 泰克2008 | 来源:发表于2019-01-23 11:33 被阅读0次

    链式编程思想特点:方法返回值必须要有方法调用者!!

    一、Masonry 使用

    - (void)viewDidLoad {
        [super viewDidLoad];
        //创建一个View
        UIView * redView = [[UIView alloc]init];
        redView.backgroundColor = [UIColor redColor];
        [self.view addSubview:redView];
        //添加约束  --  make约束制造者!!
        [redView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.top.equalTo(@10);
            make.right.bottom.equalTo(@-10);
        }];    
    }
    

    二、mas_makeConstraints 执行流程

    1. 创建约束制造者MASConstraintMaker,并且绑定控件,生成一个保存所有约束的数组;
    2. 执行mas_makeConstraints传入的Block;
    3. 让约束制造者安装约束!
    #import "View+MASAdditions.h"
    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
        self.translatesAutoresizingMaskIntoConstraints = NO;
        //1、建约束制造者MASConstraintMaker,并且绑定控件
        MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
        //2、执行mas_makeConstraints传入的Block
        block(constraintMaker);
        //3、让约束制造者安装约束!
        return [constraintMaker install];
    }
    
    #import "MASConstraintMaker.h"
    - (id)initWithView:(MAS_VIEW *)view {
        self = [super init];
        if (!self) return nil;
        self.view = view;
        //1、生成一个保存所有约束的数组
        self.constraints = NSMutableArray.new;
        return self;
    }
    

    三、让约束制造者安装约束!

    * 3.1 清空之前的所有约束
    * 3.2 遍历约束数组,一个一个安装
    
    #import "MASConstraintMaker.h"
    - (NSArray *)install {
        //1. 清空之前的所有约束
        if (self.removeExisting) {
            NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view];
            for (MASConstraint *constraint in installedConstraints) {
                [constraint uninstall];
            }
        }
        //2. 遍历约束数组,一个一个安装
        NSArray *constraints = self.constraints.copy;
        for (MASConstraint *constraint in constraints) {
            constraint.updateExisting = self.updateExisting;
            [constraint install];
        }
        [self.constraints removeAllObjects];
        return constraints;
    }
    

    四、自己实现链式编程

    准备做一个整数加法计算器,支持连缀,使用链式编程思想。

    ** 主要步骤 **

    1. 创建一个加法计算器(SumManager);
    2. 执行传入的Block;
    3. 返回计算结果
    + (int)hk_makeConstraints:(void (^)(SumManager *))block
    {
        //1. 创建一个加法计算器(SumManager)
        SumManager * mgr = [[SumManager alloc]init];
        2. 执行传入的Block
        block(mgr);
        3. 返回计算结果
        return mgr.result;
    }
    
    加法计算器

    ** 注意要点 **:

    1. 方法返回值必须是方法调用者,即返回SumManager对象;
    2. 为了使用点语法调用add()方法,必须使用“有参数有返回值的Block ”作为返回值
    #import <Foundation/Foundation.h>
    
    @interface SumManager : NSObject
    
    /** 结果 */
    @property(assign, nonatomic) int result;
    // 为了使用点语法调用add()方法,必须使用“有参数有返回值的Block ”(SumManager *(^)(int value))作为返回值
    - (SumManager *(^)(int value))add;
    
    @end
    
    #import "SumManager.h"
    
    @implementation SumManager
    
    - (SumManager * (^)(int value))add {
        return ^(int value){
            _result += value;
            //方法返回值必须是方法调用者
            return self;
        };
    }
    
    @end
    

    五、实例代码

    https://pan.baidu.com/s/1bRmPAVfumOpQsrFXdNoFsA

    相关文章

      网友评论

        本文标题:Masonry 链式编程

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