什么是鏈?zhǔn)骄幊?,我看到這個(gè)東西第一反應(yīng),這不就是一個(gè)裝飾模式嘛,其實(shí)我的理解,鏈?zhǔn)骄幊叹褪且粋€(gè)寫(xiě)法特別的裝飾模式,具體怎么特別呢。他用“.”來(lái)鏈接各個(gè)代碼塊,大家最熟悉的應(yīng)該就是現(xiàn)在特別火的masonry了(雖然我還是用frame。。)
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.bottom.and.right.equalTo(@(0));//這句就是了
}];
這種寫(xiě)法的好處呢,看起來(lái)清晰明了,,不過(guò)masonry太難懂了,我找了好幾個(gè)鏈?zhǔn)骄幊痰拇a,最后自己寫(xiě)了一個(gè),非常簡(jiǎn)單,方便大家入門(mén)。
先來(lái)一個(gè)h文件放定義的block(忘了說(shuō)了鏈?zhǔn)骄幊痰拇a塊是使用block實(shí)現(xiàn)的)-文件名LinkBlocks.h
@class LinkLabel;
typedef LinkLabel *(^MakeFrame)(CGRect frame);
#define MakeFrame(frame) ^LinkLabel *(CGRect frame)
typedef LinkLabel *(^MakeBackgroundColor)(UIColor * color);
#define MakeBackgroundColor(color) ^LinkLabel *(UIColor * color)
接下來(lái)寫(xiě)一個(gè)label,就舉個(gè)例子我就只寫(xiě)兩個(gè)屬性了,懶死了
h文件
#import <UIKit/UIKit.h>
#import "LinkBlocks.h"
@interface LinkLabel : UILabel
/** frame */
@property (nonatomic, copy) MakeFrame makeFrame;
/** backgoundcolor */
@property (nonatomic, copy) MakeBackgroundColor makeColor;
+(instancetype)labelinitWith:(void (^)(LinkLabel *make)) initblock;
@end
m文件
#import "LinkLabel.h"
@implementation LinkLabel
+(instancetype)labelinitWith:(void (^)(LinkLabel *make)) initblock{
LinkLabel *lable = [[LinkLabel alloc] init];
if (initblock) {
initblock(lable);
}
return lable;
}
-(MakeFrame)makeFrame{
return MakeFrame(frame){
self.frame = frame;
return self;
};
}
-(MakeBackgroundColor)makeColor{
return MakeBackgroundColor(color){
self.backgroundColor = color;
return self;
};
}
@end
最后來(lái)個(gè)使用
LinkLabel * label = [LinkLabel labelinitWith:^(LinkLabel *make) {
make.makeFrame(CGRectMake(100, 100, 100, 30)).makeColor([UIColor yellowColor]);
}];
label.text = @"link label";
[self.view addSubview:label];
好啦,打完收工。大家有什么問(wèn)題,咱們一起討論