iOS入門
Tangram2.0庫
Android
Tangram-Android
Virtualview-Android
iOS
tangram 使用的工具類
virtualview_tools
Tangram
ios的Tagram總體由四部分構(gòu)成:Core,Layout,EventBus,Helper
1撩嚼、Core
Tangram的復(fù)用和回收機制是由core負責(zé)的蚊锹。主要的原理就是使用了LazyScroll(底層是UIScrollView)筒占,就是先把LazyScroll里面所有需要回收復(fù)用的視圖的絕對坐標先整理出來晚碾,然后在LazyScroll滾動的時候,查找哪些視圖需要回收扔字,哪些視圖需要復(fù)用囊嘉。core主要是TangramView。
TangramView的核心方法:
2革为、LayOut
LayOut主要負責(zé)處理內(nèi)部組件擺放的位置扭粱。布局需要實現(xiàn)TangramLayoutProtocol。它的核心方法是calculateLayout震檩,這里面需要安排內(nèi)部ViewModel的位置琢蛤,決定后面要生成的視圖要如何擺放。
Tangram有豐富的內(nèi)置布局可供選擇抛虏,比如 流式布局博其、一拖N的、浮標迂猴、固定慕淡、吸頂、吸底错忱、輪播儡率、線性滾動、瀑布流等布局以清,當(dāng)然布局也可以自行拓展。因為有些布方式比較特殊崎逃,TangramView會對它們有特殊的處理邏輯掷倔。
布局樣式:
內(nèi)置的布局類型,可以參考
http://tangram.pingguohe.net/docs/layout-support/inner-support
3个绍、EventBus
事件總線用于組件和Controller勒葱,layout、TangramView之間的通信巴柿。點擊凛虽、曝光就是典型的事件總線使用場景。
事件總線的使用方法:
4广恢、Helper
Helper的作用是簡化代碼凯旋,快速生成布局、組件。
Helper具體是指TangramDefaultDataSourceHelper, 這個解析器具備以下功能:
- 快速解析layout---(NSDictionary -> layout實例)
- 快速解析Model-----(NSDictionary -> model實例)
- 從model快速生成element----(model實例 ->組件實例)
- 用新的model刷新即將被復(fù)用的element
TangramDefaultDataSourceHelper實際上是串聯(lián)起來了三種類型的工廠類至非,每種各需要一個钠署。Helper在這三個工廠提供的API基礎(chǔ)上,再封裝成更易于使用的API荒椭。這三個工廠默認的是
- TangramDefaultLayoutFactory
- TangramDefaultItemModelFactory
- TangramDefaultElementFactory
VirtualView
VirtualView簡介
VirtualView 是 Tangram 2.0 庫中的一個重要組成部分谐鼎。是Tangram模型在V2.0補充的UI開源庫。
VirtualView的作用
解決Tangram V1.0中加載性能低和UI組件沒有辦法動態(tài)更新的問題趣惠。
VirtualView的功能
- 使用Canvas繪制視圖狸棍,創(chuàng)建虛擬化組件
- 通過XML快速的創(chuàng)建界面模版
- 客戶端運行時動態(tài)加載XML模版,從而渲染界面
VirtualView被稱為虛擬組件的原因
1味悄、使用canvas繪制視圖
2隔缀、不存在實際的view,依賴于宿主容器視圖
3傍菇、VirtualView不想我們平常使用的一些控件猾瘸,比如Label,Button等等
VirtualView的主要流程
提供了用 XML 去書寫 UI 組件的方案丢习,然后動態(tài)化下發(fā)編譯好的二進制文件牵触,最后再利用客戶端內(nèi)置的 SDK 來解析展示這些 UI 組件。
VirtualView的主要流程:
流程:
- 編寫業(yè)務(wù)組件模板
- 通過工具將模板數(shù)據(jù)編譯成二進制數(shù)據(jù)咐低。注意加載 XML 并不是直接加載原始 XML 文件揽思,而是先通過 virtualview_tools 編譯成一段二進制數(shù)據(jù),生成后綴為 .out的文件见擦。
- 下發(fā)到客戶端钉汗。客戶端加載二進制數(shù)據(jù)可以有兩種路徑:
第一種:直接將編譯結(jié)果打包到客戶端里加載鲤屡,
第二種:是發(fā)布到模板管理后臺cdn上损痰,讓客戶端去下載,在線更新到模版數(shù)據(jù)酒来。 - 加載解析二進制數(shù)據(jù)卢未。不論是那種方式加載二進制數(shù)據(jù),客戶端的工作都需要解析二進制數(shù)據(jù)堰汉,比如校驗版本號辽社,合法性,讀取頭信息等等翘鸭。
- 創(chuàng)建組件視圖滴铅。會根據(jù)組件名稱找到二進制數(shù)據(jù),通過上面介紹過的Helper工具解析并且創(chuàng)建出真正的組件模型數(shù)據(jù)就乓。
- 綁定業(yè)務(wù)數(shù)據(jù)汉匙。用戶需要獲取到業(yè)務(wù)數(shù)據(jù)綁定到組件上拱烁,組件的屬性里可以寫表達式來指定使用哪一個數(shù)據(jù)字段。
- 顯示盹兢,組件結(jié)合業(yè)務(wù)數(shù)據(jù)渲染在視圖上面邻梆。
VirtualView的特點
1、渲染性能高绎秒。渲染出來的視圖結(jié)構(gòu)呈現(xiàn)扁平化浦妄。
2、組建熱更新见芹〖谅Γ可以通過配套的xml模版來更新sdk;可以動態(tài)更新組件和界面玄呛。
3阅懦、跨平臺。一套xml模版徘铝,可以android耳胎、iOS倆個不同的平臺使用。
4惕它、兼容性好怕午。可以支持加載淹魄、渲染原生基礎(chǔ)組件郁惜;也可以解決虛擬化view帶來的原生view的能力損失的問題。
5甲锡、使用方便兆蕉。它內(nèi)置了一系列基礎(chǔ)組件可以直接被使用;也支持數(shù)據(jù)綁定的表達式缤沦。也可以在樣式動態(tài)化虎韵。數(shù)據(jù)動態(tài)化的場景下能非常方便地實現(xiàn)業(yè)務(wù)需求。
參考文件
http://www.reibang.com/p/48764ff8449f
http://www.reibang.com/p/cd634106f533