Dinas的誕生
我是習慣用純代碼的開發(fā)者,布局大面積使用Masnory以及小部分計算frame适室。在一次優(yōu)化首頁列表性能的時候重讀了ibireme的iOS 保持界面流暢的技巧,文章里有提到 Autolayout對于復(fù)雜視圖來說常常會產(chǎn)生嚴重的性能問題还惠。隨著視圖數(shù)量的增長您宪,Autolayout 帶來的 CPU 消耗會呈指數(shù)級上升膀跌。于是我就嘗試將首頁Cell中的Autolayout改為手動設(shè)置frame冲茸,在這個過程中屯阀,大量的位置計算以及難以理解的數(shù)字讓維護變得困難。我想如果設(shè)置frame能和Masonry添加約束一樣就好了轴术,于是Dinas就誕生了难衰。
Dinas的使用
先看一下怎么用的
UIView *head = [[UIView alloc] init];
head.backgroundColor = [UIColor blackColor];
[self.view addSubview:head];
[head din_makeStructures:^(DINStructureMaker *make) {
make.centerX.equalTo(self.view);
make.top.equalToSuperview().offset(100);
make.size.din_equalTo(CGSizeMake(200, 200));
}];
嗯,和Masonry簡直一樣逗栽。
需要設(shè)置frame的view盖袭,其superview不能為nil。
Dinas的設(shè)計思路
1.調(diào)用方式必須雷同Masnory彼宠,使用left苍凛、righ、equalTo...來對view的位置做描述兵志。
2.設(shè)置frame最終目的是設(shè)置 x、y宣肚、width想罕、height 這四個值,這需要分析left霉涨、right等等組合條件計算這四個值按价。
3.使用convertRect:toView:
來計算相對位置。
Dinas的安裝
CocoaPods
在Podfile中
pod 'Dinas'
下載Demo將Dinas文件夾拷貝至自己的工程中
https://github.com/ziooooo/Dinas
寫在最后
- Dinas并不能和Masonry的寫法完全一樣笙瑟,比如offset()只能填寫數(shù)值楼镐。
- 需要設(shè)置frame的view,其superview不能為nil往枷。
- 使用Dinas時框产,時刻提醒自己在設(shè)置frame。比如在對UILable設(shè)置frame時并不能根據(jù)label內(nèi)容固有大小來自動設(shè)置size错洁。
- 提供了一個debug()方法秉宿,會在控制臺輸出frame沒有設(shè)置的值(eg:
X Not Sure
)。 - 關(guān)于Autolayout和設(shè)置frame混用屯碴,在superview設(shè)置frame后描睦,可以使用Autolayout。
- 孤軍奮戰(zhàn)許久导而,喜愛造輪子忱叭,渴求同行交流...
Show Time
Demo