iOS混合開發庫(GICXMLLayout)1、介紹

功能介紹

GICXMLLayout(如下簡稱GIC)是iOS上的一個全新的混合開發庫,項目地址:github.com/ghwghw4/GIC…html

在線文檔地址:gicxmllayout.gonghaiwei.cn前端

GICXMLLayout能幹什麼?有什麼特色?git

  1. 使用XML來描述UI、動畫、事件綁定、數據綁定。github

    是的,你能夠直接使用XML來寫動畫、甚至直接調用CGContext來畫線、圖形甚至報表。小程序

  2. 數據綁定數組

    GIC提供了優秀的數據綁定能力,綁定語法相似於前端的VUE,固然也支持JS表達式。目前支持三種綁定模式,分別是:once:一次性、 one way:單向綁定、two way:雙向綁定promise

  3. 支持MVVM模式。性能優化

    UI是使用XML來描述的,而業務邏輯你可使用Native代碼或者直接JavaScript來寫。而且得益於數據綁定功能,作到了UI和業務邏輯的徹底分離。開發體驗上接近前端的開發。async

  4. 優秀的佈局系統。佈局

    相比較於iOS原生的自動佈局,GIC的佈局系統將會更加的靈活方便、也更簡單、佈局性能也更高,更是提供了完整的相似前端FlexBox佈局的佈局面板。使得在實際的開發過程當中,使用極少的代碼就能寫出複雜的佈局。整個佈局體驗相似前端的HTML+CSS,可是GIC更加簡單。事實上,但凡使用過flex佈局系統的同窗都知道這套佈局系統是多麼的好用。

  5. 模板系統

    相似於前端的template技術,你能夠將部分UI封裝成模板(事實上任何可以使用XML描述的均可以封裝成模板),而後在任意地方使用已封裝的模板。甚至支持模板嵌套佔位模板,使得在實際的開發過程當中,進一步的簡化UI的開發流程。

  6. 簡單、優秀的自定義擴展能力。

    GIC在自定義擴展方面作到了儘量的簡化。你甚至能夠直接一行代碼就將原來寫的UIViewUIViewController變成自定義元素,而後在XML中調用。能夠參考文檔中的自定義一章,

  7. 支持JavaScript

    最新版本支持大多數的ES6特性,包括但不限於promiseyieldarrow functionclass等,也支持ES8asyncawait等特性。最低適配iOS8.0。(注:iOS9.0及如下版本是不支持ES六、ES8的,可是GIC支持)

  8. HotRload & HotUpdate

    HotRload適用於開發調試,HotUpdate適用於生產環境。固然前提是你的業務邏輯是用JavaScript來寫的。

開發初衷

做爲一個iOS開發者,開發過大大小小差很少10多個APP,對於iOS的UI佈局能夠說是深有體會。在iOS上開發UI佈局,有兩種途徑。1.storyboard(xib) 2.純coding的形式。這裏不比較哪一種開發方式更好,我本身選擇的是第二種方式。其實無論使用哪一種方式,在開發效率上實際上是很低的,尤爲是列表類的頁面開發,更甚者是非固定高度的列表類頁面的開發,開發流程複雜、低效,還要考慮性能優化等問題。

舉個例子:Feeds類的頁面,這樣的頁面的特色是佈局複雜,Cell的高度是不固定的,尤爲是裏面的lable顯示,有的最多顯示兩行、有的不限行數等等,咱們在實現這樣功能的時候,通常是以下流程:自定義UITableViewCell->建立佈局UI->計算每一個Cell的高度->顯示Cell,這裏面最複雜的並非建立佈局UI,而是須要你手動的計算Cell的高度,哪怕你使用了autolayout,可是計算Cell的高度這一步你仍是逃不掉,由於UITableView在顯示的時候就須要你提供cell的高度,除了這些更不要說爲UITableView進行的各類性能優化的過程了。

而如今有了GIC之後,你無需自定義UITableViewCell,也無需手動去計算cell的高度,你只須要使用XML編寫UI的佈局代碼便可,很是的方便。好比:

<!-- list 等同於UITableView -->
<list background-color="white" separator-style="1">
    <section>
        <!--使用for指令來將數據源中的數組循環生成list-item-->
        <for>
            <!-- list-item 等同於UITableViewCell -->
            <list-item selection-style="2">
                <inset-panel background-color="white" inset="15">
                    <lable text="{{ name }}" font-size="15"></lable>
                </inset-panel>
            </list-item>
        </for>
    </section>
</list>
複製代碼

從XML的佈局代碼來看,你能夠很容易的從中看到UITableView的影子,有section,有list-item(UITableViewCell),有每一個Cell的佈局代碼,很是的簡單,複雜的例子,您能夠直接從項目自帶的例子中查看。

隨着GIC開發的深刻,後來發現若是業務邏輯僅僅是經過Native的ViewModel來實現的話仍是有侷限性的,所以在最新版本中,基於JavaScriptCore這個官方庫實現了能夠直接執行JavaScript代碼的功能。使用最新的版本,已經能夠結合XML+JavaScript來開發一個完整的APP了。而後經過將XMLJavaScriptImages等靜態資源打包更新的方式來實現整個APP的Hot Update功能。

其實您可能會說,這個庫相較於RN、Weex等有什麼優點?GIC的開發初衷可不是用來替代RNWeex的,而是對現有iOS開發方式的一種改進。

將原來native使用coding或者storybord、xib等方式來寫UI的方式替換成徹底使用XML來描述,而且將原來native須要對每一個UI作frame計算或者使用autolayout佈局的方式替換成另一種自動佈局方式,你無需去計算UI的frame,GIC會自動將每一個元素的佈局計算好。

GIC目前只有iOS的版本,並不具有跨平臺的能力。但除了這個之外,GIC已經能知足大多數的開發需求,哪怕有些功能是不具有的,但您也能夠經過自定義擴展的途徑來實現特殊的需求,好比:有些頁面的導航欄在滑動的時候須要漸變功能,這樣的功能你徹底能夠經過本身擴展來實現,以後照樣能使用XML來加載。RN、Weex等除了須要會JavaScript之外,還須要你會HTML+CSS等技能,而GIC在最簡單的狀況下,你只須要會XML就好了。

有了GIC之後並不意味着你可以直接跟Objective-CSwift等語言拜拜了,GIC只是對現有iOS開發方式的一種擴充,可是自定義元素、自定義behavior等其餘自定義功能,仍然須要你本身使用OCSwift進行開發。

事實上在基於GIC的基礎上,你能夠本身擴展出屬於本身的一套自定義元素、behavior,而後開發出相似小程序那樣的功能。

相關文章
相關標籤/搜索