最近開始工作恨豁,也就接觸學(xué)習(xí)到更多,寫日記的時候激挪,也就把這些記一記
Masonry
在項目中出現(xiàn)的問題: iOS8辰狡,iOS9上,如果你限制的條件沒有寫好垄分,那估計很難發(fā)現(xiàn)你自己寫少了一個半個限制宛篇,因為可能兼容性比較好吧,但是如果在iOS7上的話薄湿,少則畫面出乎你的意料叫倍,多則......讓你糾結(jié)半天都找不出bug的問題偷卧,多半就是出在這些地方∵壕耄可能因為你的view在沒有addsubview之前添加了听诸。有時候或許你以為自己邏輯判斷已經(jīng)加了,但是或許在跟服務(wù)器請求跟頁面生成是異步的情況下并沒有加上蚕泽,導(dǎo)致程序崩潰晌梨。
還有就是,如果你在xib中加了限制须妻,但是你想自己另外在邏輯判斷后更新限制仔蝌。如果你發(fā)現(xiàn)為什么自己的限制沒有加錯,但是改了半天看了半天限制的代碼荒吏,布局還是沒有改變傲簿!這個我估計就是因為你在xib中用到布局的內(nèi)容跟你更新的限制內(nèi)容不一樣绰更。例如:你在xib中使用left豆混,right作為限制條件的話,你如果想用center去更新view的布局动知,我很遺憾皿伺,那會沒有效果,無論是mas_makeConstraints 盒粮,還是mas_makeConstraints鸵鸥,但是當(dāng)我第三次編寫這個文章的時候讓我發(fā)現(xiàn)了有mas_remakeConstraints這個方法!
自己寫總結(jié)的時候丹皱,都需要重新開一下別人的blog妒穴,感覺這樣的比較完整。Massory實用的block語法摊崭,因此一個weak self就顯得有備無患讼油。
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
UIView *sv = [UIView new];
[sv showPlaceHolder];
sv.backgroundColor = [UIColor blackColor];
[self.view addSubview:sv];
[sv mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(ws.view);
make.size.mas_equalTo(CGSizeMake(300, 300));
}];
為一個view對象添加一個autolayout只需要一個block語句的調(diào)用。
但是需要注意的是:
- 自己添加的限制需要做到真的可以完全定住這個view呢簸,不然就可能你在這個設(shè)備系統(tǒng)上運行沒問題矮台,但是換了個設(shè)備效果就不出來了,那么問題就是出在你設(shè)的限制沒有能固定這個view根时。
- 還有一個注意的地方就是瘦赫,你需要先addsubview然后才能設(shè)定這個view的autolayout。
項目中蛤迎,我在xib設(shè)置了限制确虱,但是在服務(wù)器請求之后需要對布局進行修改,這時我還是用了mas_makeConstraints這個方法替裆,現(xiàn)在看來是有問題的校辩。
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker make))block;
/
mas_makeConstraints 只負(fù)責(zé)新增約束 Autolayout不能同時存在兩條針對于同一對象的約束 否則會報錯
mas_updateConstraints 針對上面的情況 會更新在block中出現(xiàn)的約束 不會導(dǎo)致出現(xiàn)兩個相同約束的情況
mas_remakeConstraints 則會清除之前的所有約束 僅保留最新的約束
三種函數(shù)善加利用 就可以應(yīng)對各種情況了
*/
一些高級使用git源碼也有介紹窘问,我這里再貼一個介紹的比價好的blog
Masonry介紹與使用實踐:快速上手Autolayout
####### 之前還看過使用autolayout優(yōu)先級這個東西,也沒試過masonry里面怎么樣宜咒,以后有空用到或者想到的時候再補補惠赫。
有趣的Autolayout實現(xiàn)
#NSArray遍歷的那些事
有些時候,需要遍歷一個數(shù)組荧呐,有些時候需要反向遍歷一個數(shù)組,有些時候需要在數(shù)組里面找一個數(shù)字纸镊,但是有些時候需要找一個對象倍阐,在C語言中,如果比較兩個值或者兩個指針?biāo)赶虻膬?nèi)容逗威,比較的方法很簡單代碼也很少峰搪,但是如果指針?biāo)赶虻氖墙Y(jié)構(gòu)體,那就需要對結(jié)構(gòu)體內(nèi)的參數(shù)進行一一的比較。
可變與不可變數(shù)組
可變與不可變之間凯旭,就是一個不可以修改的條件嘛概耻。那你就錯了,可變與不可變數(shù)組之間還有一個深復(fù)制與淺復(fù)制的差別罐呼,現(xiàn)在我也忘記區(qū)別了鞠柄,有空回頭補。
//言歸正傳嫉柴,遍歷厌杜。
NSArray arr;
if (id objecet in arr)
{
if (id == something_){
}
}
一般情況下我們都會這么用,前幾天我看hit-testing的時候计螺,看到了一個反向遍歷的函數(shù)夯尽,但是其實也是將array取反然后再遍歷罷了
//取反函數(shù):只需要把判斷式子改一下
if (id object in [arr reverseObjectEnumerator]){
}
但是還有一種情況,就是當(dāng)你需要對一個