Masonry的鏈?zhǔn)骄幊伤枷?/h4>
mas_makeConstraints 給控件設(shè)置布局
參數(shù)是一個(gè)block
返回值是一個(gè)NSArray
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
self.translatesAutoresizingMaskIntoConstraints = NO;
MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
block(constraintMaker);
return [constraintMaker install];
}
個(gè)人理解: 拿我特別喜歡吃的木屋燒烤舉例子.
1.創(chuàng)建一個(gè)約束制造者
- 拿下菜單.
2.調(diào)用block(maker) 讓外界把約束加好
- 把點(diǎn)菜那個(gè)單給顧客, 想吃啥自己往上面寫.
3.[constraintMaker install]; 遍歷約束制造者的所有約束并返回.
- 上菜給顧客
- install是老板烤串,把串烤好在return
MASConstraintMaker 約束制造者類 (點(diǎn)菜單) 在Masonry里也封裝了些添加約束的方法. 通過鏈?zhǔn)骄幊伤枷?使得添加約束簡(jiǎn)單明了.
- 點(diǎn)菜時(shí)候各種菜名很復(fù)雜,或許有不認(rèn)識(shí)的字,所以顧客點(diǎn)菜時(shí)候不用寫菜的全名,只要把相應(yīng)的編號(hào)寫上去就好 比如想點(diǎn)3L的朝日啤酒 就寫2310.
另外關(guān)于鏈?zhǔn)骄幊伤枷?我以Masonry的源碼為基礎(chǔ) 寫了一個(gè)簡(jiǎn)單的圖文混排,以便更好的理解鏈?zhǔn)骄幊伤枷?
- (void)viewDidLoad {
[super viewDidLoad];
NSString *str = @"Sniper";
NSMutableAttributedString *waterStr = [str makeString:^(ZNStringMaker *maker) {
maker.addStr(@" is").addStr(@" a").addStr(@" Developer ").addImgName(@"water").addStr(@" yo~!");
}];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 50, 240, 40)];
[self.view addSubview:label];
label.attributedText = waterStr;
label.backgroundColor = [UIColor orangeColor];
}
結(jié)果:
代碼:
#import <Foundation/Foundation.h>
#import "ZNStringMaker.h"
@interface NSString (ZNAdd)
- (NSMutableAttributedString *)makeString:(void (^)(ZNStringMaker *maker))block;
@end
#import "NSString+ZNAdd.h"
@implementation NSString (ZNAdd)
- (NSMutableAttributedString *)makeString:(void (^)(ZNStringMaker *maker))block; {
ZNStringMaker *maker = [[ZNStringMaker alloc] initWithStr:self];
block(maker);
return [maker makeAttrStr];
}
@end
#import <Foundation/Foundation.h>
@interface ZNStringMaker : NSObject
- (ZNStringMaker * (^)(NSString *str))addStr;
- (ZNStringMaker * (^)(NSString *imgNameStr))addImgName;
- (instancetype)initWithStr:(NSString *)str;
- (NSMutableAttributedString *)makeAttrStr;
@end
#import "ZNStringMaker.h"
#import <UIKit/UIKit.h>
@interface ZNStringMaker ()
@property (nonatomic, copy)NSMutableString *strResult;
@property (nonatomic, copy)NSMutableAttributedString *attrStrResult;
@end
@implementation ZNStringMaker
- (ZNStringMaker * (^)(NSString *str))addStr {
return ^(NSString *str) {
if (str) {
if (_attrStrResult) {
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:str];
[_attrStrResult appendAttributedString:attrStr];
} else {
[_strResult appendString:str];
}
}
return self;
};
}
-(ZNStringMaker *(^)(NSString *))addImgName {
return ^(NSString *str) {
if (str) {
NSTextAttachment *textAttach = [[NSTextAttachment alloc] init];
NSString *imgName = str;
textAttach.image = [UIImage imageNamed:imgName];
NSAttributedString *attrImg = [NSAttributedString attributedStringWithAttachment:textAttach];
_attrStrResult = [[NSMutableAttributedString alloc] initWithString:_strResult];
[_attrStrResult appendAttributedString:attrImg];
}
return self;
};
}
- (instancetype)initWithStr:(NSString *)str {
self = [super init];
if (self) {
_strResult = [[NSMutableString alloc] initWithString:str];
}
return self;
}
- (NSMutableAttributedString *)makeAttrStr {
return _attrStrResult;
}
@end