Masonry 是什么
Masonry簡(jiǎn)介
Masonry 是一個(gè)基于AutoLayout的開(kāi)源庫(kù)歇竟,GitHub
Masorny, 它實(shí)了用鏈?zhǔn)秸Z(yǔ)法來(lái)進(jìn)行自動(dòng)布局。
例子
舉個(gè)栗子伐谈,就是下面這樣使用
someView = [[UIView alloc] init];
[someView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view); // line 1
make.size.mas_equalTo(CGSizeMake(250, 250)); // line 2
}];
這段代碼,就是讓someView,位于self.view的中間贾陷,且大小為(250逮京,250)卿堂,是不是很簡(jiǎn)潔,而且鏈?zhǔn)秸Z(yǔ)法看著非常的舒服懒棉。
鏈?zhǔn)秸Z(yǔ)法如何實(shí)現(xiàn)的草描?
閉包@缆獭!陶珠!
我們來(lái)看line 1的代碼挟裂,make.center.equalTo(self.view);
- make 從上面的代碼可以看出是一個(gè)
MASConstraintMaker
對(duì)象 - center是
MASConstraintMaker
的一個(gè)屬性,通過(guò)點(diǎn)語(yǔ)法拿到center以后揍诽,center是一個(gè)MASConstraint
對(duì)象(是什么對(duì)象不重要诀蓉,重要的是這個(gè)是一個(gè)對(duì)象,有對(duì)象就有方法) - equalTo是
MASConstraint
對(duì)象中的一個(gè)實(shí)例方法暑脆,實(shí)現(xiàn)如下
- (MASConstraint * (^)(id))equalTo {
return ^id(id attribute) {
return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
};
}
- 這個(gè)方法渠啤,沒(méi)有參數(shù),返回值是一個(gè)類型為(MASConstraint * (^)(id))添吗,即返回值是
MASConstraint
對(duì)象沥曹,接受一個(gè)id類型參數(shù)的閉包(有點(diǎn)繞,反正重點(diǎn)就是碟联,這個(gè)方法妓美,返回一個(gè)閉包
)。 - 然后這里作者沒(méi)用用
[]
調(diào)用equalto
這方法鲤孵,而是用的點(diǎn)語(yǔ)法來(lái)調(diào)用的這個(gè)方法壶栋,是因?yàn)镺C中雖然推薦只有對(duì)象屬性的get、set方法使用點(diǎn)語(yǔ)法普监,其實(shí)一般的示例方法也是可以用點(diǎn)語(yǔ)法這樣做的贵试。但不推薦大家這樣做了。
//這里再說(shuō)一下 如果用[]怎么訪問(wèn)這個(gè)閉包
// make.center.equalTo(self.view);
[make.center equalTo](self.view);
// equelTo這個(gè)方法只是返回一個(gè)閉包凯正,這個(gè)閉包調(diào)用毙玻,需要你用小括號(hào),去調(diào)用廊散。
- 再來(lái)說(shuō)下這個(gè)閉包桑滩。這個(gè)閉包
- 返回值是
MASConstraint
對(duì)象,接受一個(gè)id類型參數(shù)允睹,首先這個(gè)返回值施符,可以對(duì)其繼續(xù)訪問(wèn)相應(yīng)的屬性,然后訪問(wèn)相應(yīng)的方法擂找。 - 參數(shù)傳入閉包中戳吝,調(diào)用了類的一個(gè)私有方法。
- 返回值是
總結(jié)一下
是不是看完感覺(jué)有點(diǎn)亂贯涎,沒(méi)關(guān)系听哭,我也有點(diǎn)亂。其實(shí)總結(jié)一下鏈?zhǔn)秸Z(yǔ)法就是這樣實(shí)現(xiàn)的
- OC中的屬性get、set方法陆盘,以及普通實(shí)例方法都可以通過(guò)點(diǎn)語(yǔ)法來(lái)訪問(wèn)普筹。
- 使用一個(gè)返回閉包的示例方法,閉包返回類型為一個(gè)對(duì)象隘马。
- 通過(guò)點(diǎn)語(yǔ)法調(diào)用這個(gè)示例方法太防,這個(gè)時(shí)候它是一個(gè)閉包,然后通過(guò)小括號(hào)調(diào)用這個(gè)閉包酸员,這個(gè)時(shí)候它是一個(gè)對(duì)象蜒车,然后又可以通過(guò)這個(gè)對(duì)象的其他方法,這樣循環(huán)調(diào)用下去