用MyLayout實現佈局性能的提高以及對國際化佈局的支持

iOS界面佈局庫MyLayoutTangramKit已經完成新版本的升級而且已經更新到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

  1. 用frame構建視圖用時最少,平均每一個視圖花費0.068ms。當視圖的frame指定後就再也不須要佈局視圖了,因此佈局時間幾乎是0。圖片

  2. 當用AutoLayout進行佈局時每一個子視圖的平均構建時長約爲0.189ms,而Masonry由於是對AutoLayout的封裝因此平均構建時長約爲0.289ms。在佈局時則由於都是使用了AutoLayout因此是相等的,大概花費0.255ms左右。rem

  3. MyLayout的實現由於是對frame的封裝,因此不管是構建時長和佈局時長都要優於AutoLayout,但低於原始的frame方法。MyLayout的平均構建時長約0.150ms,比frame構建要多花費2.2倍的時間;而AutoLayout的平均構建時長是MyLayout的1.26倍;Masonry的平均構建時長則是MyLayout的1.9倍。get

  4. MyLayout的平均佈局時長是0.05ms, 而AutoLayout的佈局時長則是MyLayout的5倍。it

  5. UIStackView的構建時長要稍微優於MyLayout的線性佈局MyLinearLayout.可是佈局時長則是MyLinearLayout的5.5倍。io

  6. MyLayout中流式佈局MyFlowLayout的構建時長和佈局時長最小,而相對佈局的構建和佈局時長最長。

  7. 能夠看出隨着視圖數量的增長Frame和MyLayout的時長都是按線性增加的,而AutoLayout的是愈來愈趨向非線性增加了。

  8. 若是咱們使用SB或者XIB進行佈局時那麼整個佈局的時長還要包括對XML格式文件的解析的時間所以,雖然SB或者XIB進行佈局方便可是消耗的時間是最多的。

RTL的支持。

所謂RTL方向佈局就是right to left direction。也就是界面中的元素老是按從右往左的方向進行排列布局,大部分國家的書寫以及排列習慣都是從左往右,是LTR方向佈局,而對於一些阿拉伯國家,文字的書寫以及展現的順序都是從右往左方向的,下面的兩張圖片展現了阿拉伯國家的界面展現效果。

RTL佈局

RTL佈局
蘋果在iOS9中對RTL進行了全面的支持。而MyLayoutTangramKit此次新升級的版本對RTL的支持但是沒有任何版本限制的。爲了實現對RTL的支持咱們在水平方向提出了leading和trailing的概念,中文就是理解爲頭部和尾部。當您是LTR方向佈局時leading就是表明的左邊而trailing則是表明的右邊;而當您是RTL方向佈局時leading就表明的是右邊而trailing則表明的是左邊。經過這個新定義的概念您就不須要擔憂在進行國際化佈局時指定方向了。下面是MyLayout中對RTL支持的一些效果。

MyLayout對RTL的支持

爲了實現RTL的支持您只須要將MyLayout的一個全局屬性isRTL設置爲YES或者NO就好了,經過這個屬性能夠很方便的切換佈局的方向了。

最後歡迎你們關注個人iOS界面佈局庫:
MyLayout: https://github.com/youngsoft/...
TangramKit: https://github.com/youngsoft/...

相關文章
相關標籤/搜索