iOS界面佈局庫MyLayout和TangramKit已經完成新版本的升級而且已經更新到github和cocoapod上面。此次新版本更新的兩個大亮點是對界面佈局的性能進行了大幅度的提高和對阿拉伯國家須要進行RTL方向佈局的支持。git
多說無益,圖表最具說服力github
下面的圖表是在iPhone6真機設備上用MyLayout和frame以及AutoLayout進行構建和佈局的時間對比表格,裏面的數據是每一個視圖的構建時間和佈局時間,單位都是毫秒:佈局
構建時間 | Frame | MyLayout | AutoLayout | Masonry | UIStackView |
---|---|---|---|---|---|
TGLinearLayout | 0.08 | 0.164 | 0.219 | 0.304 | 0.131 |
TGFrameLayout | 0.05 | 0.149 | 0.209 | 0.273 | 0.131 |
TGRelativeLayout | 0.079 | 0.182 | 0.116 | 0.359 | 0.131 |
TGFlowLayout | 0.08 | 0.107 | 0.198 | 0.258 | 0.131 |
TGFloatLayout | 0.044 | 0.148 | 0.203 | 0.250 | 0.131 |
佈局時間 | Frame | MyLayout | AutoLayout | Masonry | UIStackView |
---|---|---|---|---|---|
TGLinearLayout | 0 | 0.049 | 0.269 | 0.269 | 0.272 |
TGFrameLayout | 0 | 0.042 | 0.243 | 0.243 | 0.272 |
TGRelativeLayout | 0 | 0.068 | 0.274 | 0.274 | 0.272 |
TGFlowLayout | 0 | 0.036 | 0.279 | 0.279 | 0.272 |
TGFloatLayout | 0 | 0.055 | 0.208 | 0.208 | 0.272 |
下面的表格則是新老版本的性能提高對比圖:性能
構建時間 | 1.3.6 | 1.3.5 | 提高% | 佈局時間 | 1.3.6 | 1.3.5 | 提高% |
---|---|---|---|---|---|---|---|
MyLinearLayout | 0.164 | 0.211 | 28% | 0.049 | 0.160 | 226% | |
MyFrameLayout | 0.149 | 0.212 | 42% | 0.042 | 0.142 | 234% | |
MyRelativeLayout | 0.182 | 0.215 | 18% | 0.068 | 0.137 | 101% | |
MyFlowLayout | 0.107 | 0.146 | 37% | 0.036 | 0.111 | 210% | |
MyFloatLayout | 0.148 | 0.147 | -0.48% | 0.055 | 0.117 | 113% |
從上面的表格中咱們得出以下結論:spa
用frame構建視圖用時最少,平均每一個視圖花費0.068ms。當視圖的frame指定後就再也不須要佈局視圖了,因此佈局時間幾乎是0。圖片
當用AutoLayout進行佈局時每一個子視圖的平均構建時長約爲0.189ms,而Masonry由於是對AutoLayout的封裝因此平均構建時長約爲0.289ms。在佈局時則由於都是使用了AutoLayout因此是相等的,大概花費0.255ms左右。rem
MyLayout的實現由於是對frame的封裝,因此不管是構建時長和佈局時長都要優於AutoLayout,但低於原始的frame方法。MyLayout的平均構建時長約0.150ms,比frame構建要多花費2.2倍的時間;而AutoLayout的平均構建時長是MyLayout的1.26倍;Masonry的平均構建時長則是MyLayout的1.9倍。get
MyLayout的平均佈局時長是0.05ms, 而AutoLayout的佈局時長則是MyLayout的5倍。it
UIStackView的構建時長要稍微優於MyLayout的線性佈局MyLinearLayout.可是佈局時長則是MyLinearLayout的5.5倍。io
MyLayout中流式佈局MyFlowLayout的構建時長和佈局時長最小,而相對佈局的構建和佈局時長最長。
能夠看出隨着視圖數量的增長Frame和MyLayout的時長都是按線性增加的,而AutoLayout的是愈來愈趨向非線性增加了。
若是咱們使用SB或者XIB進行佈局時那麼整個佈局的時長還要包括對XML格式文件的解析的時間所以,雖然SB或者XIB進行佈局方便可是消耗的時間是最多的。
所謂RTL方向佈局就是right to left direction。也就是界面中的元素老是按從右往左的方向進行排列布局,大部分國家的書寫以及排列習慣都是從左往右,是LTR方向佈局,而對於一些阿拉伯國家,文字的書寫以及展現的順序都是從右往左方向的,下面的兩張圖片展現了阿拉伯國家的界面展現效果。
蘋果在iOS9中對RTL進行了全面的支持。而MyLayout和TangramKit此次新升級的版本對RTL的支持但是沒有任何版本限制的。爲了實現對RTL的支持咱們在水平方向提出了leading和trailing的概念,中文就是理解爲頭部和尾部。當您是LTR方向佈局時leading就是表明的左邊而trailing則是表明的右邊;而當您是RTL方向佈局時leading就表明的是右邊而trailing則表明的是左邊。經過這個新定義的概念您就不須要擔憂在進行國際化佈局時指定方向了。下面是MyLayout中對RTL支持的一些效果。
爲了實現RTL的支持您只須要將MyLayout的一個全局屬性isRTL設置爲YES或者NO就好了,經過這個屬性能夠很方便的切換佈局的方向了。
最後歡迎你們關注個人iOS界面佈局庫:
MyLayout: https://github.com/youngsoft/...
TangramKit: https://github.com/youngsoft/...