Masonry架構(gòu)分析

第一步:導(dǎo)入masonry框架,再導(dǎo)入頭文件

#import "Masonry.h"

第二步 :設(shè)置約束

核心代碼:

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

注意點(diǎn):使用約束布局步驟,先添加控件,再設(shè)置約束

- (void)viewDidLoad {
    [super viewDidLoad];
 
    // 創(chuàng)建紅色view
    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    // 設(shè)置約束,一定要先把view添加上去,才能設(shè)置約束
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        // 鏈?zhǔn)骄幊趟枷胩攸c(diǎn):方法返回值必須要方法調(diào)用者
        // block:把需要操作的值當(dāng)做block參數(shù),block也需要返回值,就是方法調(diào)用者
       // 設(shè)置約束
        // 給make添加left,top約束,調(diào)用equalTo給這兩個(gè)約束賦值
        make.left.top.equalTo(@10);
        make.right.bottom.equalTo(@-10);
        
    }];

效果圖

19.png

補(bǔ)充:

mas_makeConstraints執(zhí)行流程:
1.創(chuàng)建約束制造者M(jìn)ASConstraintMaker,綁定控件,生成了一個(gè)保存所有約束的數(shù)組
2.執(zhí)行mas_makeConstraints傳入進(jìn)行的block
3.讓約束制造者安裝約束
* 1.清空之前的所有約束
* 2.遍歷約束數(shù)組,一個(gè)一個(gè)安裝

實(shí)例練習(xí):寫一個(gè)加法計(jì)算器

思路分析:

第一步:寫一個(gè)自己的方法

  • 1、繼承NSObject,建一個(gè)計(jì)算分類,提供計(jì)算方法
111.png
  • 2、模仿[redView mas_makeConstraints:^(MASConstraintMaker *make) { }

NSObject+Calculate.h中,設(shè)置自己的方法

11.png
/*
 * 方法設(shè)計(jì):自己框架,最好添加一個(gè)方法前綴
 */

 // 將所有計(jì)算代碼放到這里

+(int)zs_makeCalculate:(void(^)(CalculateManager *))block;
  • 3、 此時(shí)需要一個(gè) 管理者CalculateManager

    • 繼承NSObject
    • 但沒有實(shí)現(xiàn)里面具體方法,只是先創(chuàng)建
    • CalculateManager.h 導(dǎo)入到NSObject+Calculate.h
  • 4、來到viewController.m中,看外界是如何調(diào)用的

    • 傳管理者mgr
    • 調(diào)用管理者的計(jì)算方法,所以需要在CalculateManager 里添加add方法
[NSObject zs_makeCalculate:^(CalculateManager *mgr){

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

CalculateManager.h中添加方法,同時(shí)提供一個(gè)屬性result,將CalculateManager計(jì)算的結(jié)果保存在result

@property (nonatomic ,assign) int result;

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

CalculateManager.m中實(shí)現(xiàn)方法,如果不寫return self;,只能(·)點(diǎn)一次,而且返回的類必須是CalculateManager本身,所以block返回的類型是CalculateManager

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

  • 6、上述一直沒有調(diào)用block,在第四步時(shí),只是傳進(jìn)去block。所以在NSObject+Calculate.m中實(shí)現(xiàn)調(diào)用方法
+(int)zs_makeCalculate:(void(^)(CalculateManager *))block

{
    // 創(chuàng)建文件管理者
    CalculateManager *mgr = [[CalculateManager alloc] init];
    
    block(mgr);
    
    return mgr.result;
  }  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容