Masonry的鏈?zhǔn)骄幊伤枷?/h1>

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é)果:

屏幕快照 2016-07-26 下午5.53.18.png

代碼:

#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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖倒谷,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷燥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俯艰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門锌订,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竹握,“玉大人,你說我怎么就攤上這事辆飘±卜” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蜈项,是天一觀的道長(zhǎng)芹关。 經(jīng)常有香客問我,道長(zhǎng)紧卒,這世上最難降的妖魔是什么侥衬? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮跑芳,結(jié)果婚禮上轴总,老公的妹妹穿的比我還像新娘。我一直安慰自己博个,他們只是感情好怀樟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盆佣,像睡著了一般往堡。 火紅的嫁衣襯著肌膚如雪械荷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天虑灰,我揣著相機(jī)與錄音养葵,去河邊找鬼。 笑死瘩缆,一個(gè)胖子當(dāng)著我的面吹牛关拒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庸娱,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼着绊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了熟尉?” 一聲冷哼從身側(cè)響起归露,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斤儿,沒想到半個(gè)月后剧包,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡往果,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年疆液,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陕贮。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堕油,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肮之,到底是詐尸還是另有隱情掉缺,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布戈擒,位于F島的核電站眶明,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筐高。R本人自食惡果不足惜搜囱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凯傲。 院中可真熱鬧犬辰,春花似錦、人聲如沸冰单。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诫欠。三九已至涵卵,卻和暖如春浴栽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背轿偎。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工典鸡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坏晦。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓萝玷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親昆婿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子球碉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件仓蛆、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 女人可能天生愛作看疙,有的男人覺得——女人嘛豆拨,作一點(diǎn)才顯得小女人嘛。 我也這么認(rèn)為過能庆。 現(xiàn)在既不同意也不反對(duì)施禾,也就剩下...
    菲憶飛硯閱讀 305評(píng)論 0 0
  • 20170611 我很豐盛,因?yàn)?情緒 1.我能用內(nèi)化的方式控制我的情緒了相味,面對(duì)別人的故意侵犯拾积,我沒有再選擇抱怨和...
    喵喵A閱讀 251評(píng)論 0 3
  • 【關(guān)鍵字】架構(gòu)師 軟件設(shè)計(jì) 行為樹 狀態(tài)機(jī) 有限狀態(tài)機(jī),也稱為FSM(Finite State Machine) ...
    scott_yu779閱讀 1,258評(píng)論 0 0
  • 1 外面的最高氣溫達(dá)到38oC,狗躲在了空調(diào)底下丰涉,舔著它的肉骨頭。我舔著雪糕斯碌。 大簡(jiǎn)興致勃勃地吃著烤熱狗一死。 我有兩...
    番茄炒西瓜閱讀 350評(píng)論 0 0