第一步:導(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;
}