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,而后开发出相似小程序那样的功能。

相关文章
相关标签/搜索