iOS 鏈?zhǔn)骄幊?/h1>

鏈?zhǔn)骄幊?/h4>

鏈?zhǔn)骄幊毯?jiǎn)單的說(shuō)就是將多個(gè)方法用點(diǎn)語(yǔ)法連接起來(lái)羹呵,讓代碼更加簡(jiǎn)潔壁晒,可讀性更強(qiáng)瓷们。例如MasonrySDAutoLayout;

make.left.right.mas_equalTo(0);

這一行代碼秒咐,就同時(shí)實(shí)現(xiàn)了設(shè)置左右兩邊間距都為0谬晕;

Masonry怎么實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用的


  • Masonry中,.left .right .top .bottom等方法携取,都是返回一個(gè)MASConstraintMaker實(shí)例類(lèi)固蚤,里面有l(wèi)eft、right等屬性來(lái)保存每次調(diào)用的信息歹茶;
- (MASConstraintMaker *)left;
  • Masonry中夕玩,offset(15)等方法,可以接受一個(gè)參數(shù)惊豺,然后返回的還是MASConstraintMaker實(shí)例類(lèi)燎孟,怎么接受參數(shù)呢?Masonry返回了一個(gè)block尸昧,這個(gè)block的返回值是MASConstraintMaker揩页,并且可以接收一個(gè)參數(shù);
- (MASConstraint * (^)(CGFloat offset))offset;
  • Masonry中烹俗,為了方便閱讀爆侣,還有一種方法萍程,什么都沒(méi)有處理直接返回MASConstraintMaker實(shí)例類(lèi);
- (MASConstraintMaker *)with;

創(chuàng)建我們自己的鏈?zhǔn)秸{(diào)用


我覺(jué)的我們可以通過(guò)鏈?zhǔn)秸{(diào)用來(lái)設(shè)置view的一些屬性,例如Label兔仰,首先我們要想象一下我們最終實(shí)現(xiàn)好調(diào)用的樣子茫负,

   [UILabel dcMaker_creat].frame(CGRectMake(100, 200, 100, 50))
    .text(@"this is a label")
    .textColor([UIColor redColor])
    .font(15).fontWeight(UIFontWeightMedium)
    .textAlignment(NSTextAlignmentLeft)
    .numberOfLines(2)
    .intoView(self.view);

這種方式更像SDAutoLayout,我個(gè)人更喜歡這種風(fēng)格,因?yàn)槲矣X(jué)得沒(méi)必要像Masonry那樣通過(guò)mas_makeConstraints:^(MASConstraintMaker *make) {}];MASConstraintMaker拋出來(lái)乎赴,然后在block中設(shè)置屬性忍法。我覺(jué)的可以通過(guò)某個(gè)方法拿到一個(gè)maker,然后就可以不停的點(diǎn)語(yǔ)法設(shè)置屬性榕吼,個(gè)人覺(jué)得這樣用起來(lái)非常爽哈哈哈饿序;

  • 先說(shuō)一下整體思路,首先我們需要一個(gè)類(lèi)似于MASConstraintMaker的中間類(lèi)羹蚣,這個(gè)類(lèi)可以一直調(diào)用點(diǎn)語(yǔ)法設(shè)置屬性原探,并且能保存設(shè)置的這些屬性,最后這個(gè)類(lèi)還需要一個(gè)方法來(lái)返回一個(gè)view;

  • 接下來(lái)就是具體實(shí)現(xiàn)了顽素,首先我們創(chuàng)建一個(gè)類(lèi)DCLabelMaker咽弦,然后外面要通過(guò)這類(lèi)來(lái)設(shè)置屬性,外面怎么調(diào)用呢戈抄?肯定是這樣.font(15).text(@"label"),怎么才能實(shí)現(xiàn)這樣的效果后专,模仿Masonry我們添加一個(gè)類(lèi)型為block的屬性划鸽,這個(gè)block的返回值還是DCLabelMaker

@property (nonatomic,copy,readonly) DCLabelMaker* (^font)(CGFloat font);

這樣外面用的時(shí)候就是maker.font(15)戚哎,這樣裸诽,因?yàn)榉祷氐氖?code>DCLabelMaker,所以還能接著調(diào)用點(diǎn)語(yǔ)法型凳;這樣就實(shí)現(xiàn)了連續(xù)通過(guò)點(diǎn)語(yǔ)法調(diào)用丈冬。

  • 這里有一點(diǎn)需要注意,因?yàn)橥獠恐皇峭ㄟ^(guò)點(diǎn)語(yǔ)法來(lái)調(diào)用甘畅,點(diǎn)語(yǔ)法就是get方法埂蕊,外部是不能調(diào)用set方法來(lái)修改的,因此這里設(shè)置成readonly疏唾。Masonry直接設(shè)置了一個(gè)方法
    - (MASConstraint* (^)(CGFloat offset))offset;為什么我們用屬性呢蓄氧?因?yàn)閷傩栽谡{(diào)用之后會(huì)有聯(lián)想提示,只要敲出.font,會(huì)自動(dòng)補(bǔ)全后面需要傳的參數(shù)槐脏,這樣外部編寫(xiě)的時(shí)候會(huì)非常舒服喉童;
  • 最核心的難題被我們解決了,接下就看這個(gè)屬性的get方法怎么實(shí)現(xiàn)了顿天,其實(shí)很簡(jiǎn)單堂氯,只要把傳進(jìn)來(lái)的參數(shù)保存起來(lái)就可以了蔑担。這里我新創(chuàng)建了一個(gè)ModelDCViewAttribute用來(lái)專(zhuān)門(mén)存儲(chǔ)設(shè)置的屬性;
-(DCLabelMaker * _Nonnull (^)(CGFloat))font{
    __weak typeof(self) weak_self = self;
    return ^DCLabelMaker* (CGFloat font){
        weak_self.viewAttribute.font = font;
        return weak_self;
    };
}
  • 屬性設(shè)置完之后咽白,我們就可以返回一個(gè)view了啤握,因?yàn)橐粋€(gè)view肯定是要添加到一個(gè)superView上的,因此我們?cè)O(shè)置一個(gè)方法intoView(superView),這個(gè)block接受一個(gè)參數(shù)view局扶,把要?jiǎng)?chuàng)建的view添加到這個(gè)view上恨统,然后返回出來(lái);

.h文件添加屬性

@property (nonatomic,copy,readonly) UILabel* (^intoView)(UIView *superView);

.m文件實(shí)現(xiàn)方法

- (UILabel * _Nonnull (^)(UIView * _Nonnull))intoView{
    __weak typeof(self) weak_self = self;
    return ^UILabel * _Nonnull(UIView * _Nonnull superView) {
        DCViewAttribute *viewAttribute = weak_self.viewAttribute;
        UILabel *label = [[UILabel alloc]initWithFrame:viewAttribute.frame];
        label.font = [UIFont systemFontOfSize:viewAttribute.font];
        [superView addSubview:label];
        return label;
    };
}
  • 這樣我們的maker就已經(jīng)完成了三妈,然后我們只需要給UILabel添加一個(gè)分類(lèi)方法畜埋,來(lái)創(chuàng)建一個(gè)maker就大功告成了;
.h
+ (DCLabelMaker *)dcMaker_creat;

.m
+(DCLabelMaker *)dcMaker_creat{
    DCLabelMaker *maker = DCLabelMaker.new;
    maker.viewAttribute = DCViewAttribute.new;
    return maker;
}

大功告成3肫选S瓢啊!

這樣外部調(diào)用的時(shí)候就如我們上面所想的樣子了

   [UILabel dcMaker_creat].frame(CGRectMake(100, 200, 100, 50))
    .text(@"this is a label")
    .textColor([UIColor redColor])
    .font(15).fontWeight(UIFontWeightMedium)
    .textAlignment(NSTextAlignmentLeft)
    .numberOfLines(2)
    .intoView(self.view);

參考鏈接:https://blog.csdn.net/cAj3Z1hurtGNR2/article/details/78103850
代碼鏈接:https://github.com/daichuan/DCViewMaker/tree/master

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

  • 序言:七十年代末模燥,一起剝皮案震驚了整個(gè)濱河市咖祭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔫骂,老刑警劉巖么翰,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辽旋,居然都是意外死亡浩嫌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)补胚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)码耐,“玉大人,你說(shuō)我怎么就攤上這事溶其∩龋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵瓶逃,是天一觀的道長(zhǎng)束铭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)厢绝,這世上最難降的妖魔是什么纯露? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮代芜,結(jié)果婚禮上埠褪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好钞速,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布贷掖。 她就那樣靜靜地躺著,像睡著了一般渴语。 火紅的嫁衣襯著肌膚如雪苹威。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天驾凶,我揣著相機(jī)與錄音牙甫,去河邊找鬼。 笑死调违,一個(gè)胖子當(dāng)著我的面吹牛窟哺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播技肩,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼且轨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了虚婿?” 一聲冷哼從身側(cè)響起旋奢,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎然痊,沒(méi)想到半個(gè)月后至朗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剧浸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年锹引,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛蚊。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粤蝎,死狀恐怖真仲,靈堂內(nèi)的尸體忽然破棺而出袋马,到底是詐尸還是另有隱情,我是刑警寧澤秸应,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布虑凛,位于F島的核電站,受9級(jí)特大地震影響软啼,放射性物質(zhì)發(fā)生泄漏桑谍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一祸挪、第九天 我趴在偏房一處隱蔽的房頂上張望锣披。 院中可真熱鬧,春花似錦、人聲如沸雹仿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胧辽。三九已至峻仇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邑商,已是汗流浹背摄咆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留人断,地道東北人吭从。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像含鳞,于是被迫代替她去往敵國(guó)和親影锈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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