Mansonry
# Masonry 原理
1.MASConstraintMaker作为工厂,生产一个个MASViewConstraint约束对象。
2.MASViewConstraint和MASCompositeConstraint继承于抽象类MASConstraint,为我们提供了高度封装的约束对象
3.View+MASAdditions这个UIView的扩展是Masonry与外界交互的接口类,这样很好的把复杂的约束逻辑封装在内部管理,又提供了简单的API供用户使用。
# 链式调用实战应用
在我们开发过程中,我们会经常用到UILabel,每次初始化都要设置一堆的属性,比较麻烦,当然我们也可以采取类似如下方法:+ (UILabel *)createLabelWithFont:(UIFont *)font andTextColor:(UIColor *)color andDefaultContent:(NSString *)content,但是一旦我们所需要初始化的参数比较多时,就会造成方法参数非常多,甚至我们有些参数根本不需要初始化,用链式编程该如何实现呢??
首先为UILabel创建一个category,#import "UILabel+zjLabel.h",代码如下:
#import "UILabel+zjLabel.h"
@implementation UILabel (zjLabel)
+ (UILabel *)zj_createLabel:(void (^)(UILabel * _Nonnull))block{
UILabel *label = [UILabel new];
block(label);
return label;
}
- (UILabel *(^)(NSString *))zj_text{
return ^(NSString *str){
self.text = str;
return self;
};
}
- (UILabel *(^)(UIFont *))zj_font{
return ^(UIFont *font){
self.font = font;
return self;
};
}
- (UILabel *(^)(UIColor *))zj_textColor{
return ^(UIColor *color){
self.textColor = color;
return self;
};
}
- (UILabel *(^)(NSTextAlignment))zj_textAlignment{
return ^(NSTextAlignment aligment){
self.textAlignment = aligment;
return self;
};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
在需要的地方调用方式如下:
UILabel *label = [UILabel zj_createLabel:^(UILabel * _Nonnull label) {
label.zj_text(@"haha").zj_font([UIFont systemFontOfSize:24]).zj_textColor(UIColor.redColor);
}];
[superview addSubview:label];
1
2
3
4
5
6
7
2
3
4
5
6
7
编辑 (opens new window)
上次更新: 2023/10/28, 15:22:03