第一步:导入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);
}];
效果图
![](https://img.haomeiwen.com/i3680843/b89047c75b26ac2d.png)
补充:
mas_makeConstraints执行流程:
1.创建约束制造者MASConstraintMaker,绑定控件,生成了一个保存所有约束的数组
2.执行mas_makeConstraints传入进行的block
3.让约束制造者安装约束
* 1.清空之前的所有约束
* 2.遍历约束数组,一个一个安装
实例练习:写一个加法计算器
思路分析:
第一步:写一个自己的方法
- 1、继承
NSObject
,建一个计算分类,提供计算方法
![](https://img.haomeiwen.com/i3680843/246fc3d34f653967.png)
- 2、模仿
[redView mas_makeConstraints:^(MASConstraintMaker *make) { }
在NSObject+Calculate.h
中,设置自己的方法
![](https://img.haomeiwen.com/i3680843/b954b2ff8413b43b.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;
}
网友评论