功能介绍

GICXMLLayout(以下简称GIC)是iOS上的一个全新的混合开发库,项目地址:github.com/ghwghw4/GIC…

在线文档地址:gicxmllayout.gonghaiwei.cn

GICXMLLayout能干什么?有什么特点?

  1. 使用XML来描述UI、动画、事件绑定、数据绑定。

    是的,你可以直接使用XML来写动画、甚至直接调用CGContext来画线、图形甚至报表。

  2. 数据绑定。

    GIC提供了优秀的数据绑定能力,绑定语法类似于前端的VUE,当然也支持JS表达式。目前支持三种绑定模式,分别是:once:一次性、 one way:单向绑定、two way:双向绑定

  3. 支持MVVM模式。

    UI是使用XML来描述的,而业务逻辑你可以使用Native代码或者直接JavaScript来写。并且得益于数据绑定功能,做到了UI和业务逻辑的完全分离。开发体验上接近前端的开发。

  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及以下版本是不支持ES6、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,然后开发出类似小程序那样的功能。

iOS混合开发库(GICXMLLayout)一、介绍相关推荐

  1. Unity iOS混合开发

    我的第一篇博客是写的Unity和Android平台混合开发相关,接触iOS和Object-C也有一段时间了,此次,将讲述下Unity与iOS混合开发的原理,也为Unity高级移动端混合开发做下铺垫.闲 ...

  2. OpenGL开发库的详细介绍

    OpenGL开发库的组成 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenG ...

  3. IOS:IOS集成开发和环境的介绍

    集成开发环境的介绍 Xcode :iOS集成开发环境,也是编辑器,负责管理应用程序工程. Interface Builder:快速原型开发工具,可视化的组装用户UI接口的工具,在 Xcode 4.0以 ...

  4. ionic+angularJS+iOS混合开发app的学习资料介绍和基本步骤(干货)

    ionic+angularJS+iOS 先安装nodejs.npm.angularJS和ionic 其中nodeJS和npm安装可以到官网下载nodeJS,然后双击安装就好很简单(网址: http:/ ...

  5. 安卓ios混合开发技术_微信已支持改微信号,安卓最新版微信一年可修改一次

    紫金财经6月5日消息 今日,腾讯方面发文称,安卓最新版微信已经支持微信号修改,且一年只可修改一次.随后网友们表示,微信团队终于将大家期盼已久的问题给解决了,奥利给! 腾讯官微表示,这次推出的微信号可修 ...

  6. Flutter混合开发、安卓,ios

    date:12.29,for flutter >v1.12.x 更新说明: 适配Flutter >=v1.12.x 在Flutter的应用场景中,有时候一个APP只有部分页面是由Flutt ...

  7. IOS,H5混合开发,setTimeout定时器失效

    项目中有需要定时请求服务器,来刷新用户新消息汇总的功能.没有使用第三方推送,暂时用app定时刷新来权宜实现. 安卓版本中使用的Hbuilder开发,使用是全部都是h5页面,不论当前是否是请求服务器的页 ...

  8. iOS混合开发之uni-app本地打包集成到iOS原生项目

    iOS混合开发 1.前言 2.项目背景 3.项目框架 4.从入坑到踩坑 4.1打包错误 4.2 运行错误 总结 1.前言     前端统一开发越来越多,公司为了大一统前端的所有页面显示问题,同时为节约 ...

  9. java GUI开发库——beautyeye

    java GUI开发库--beautyeye beautyeye介绍 源码地址 运行环境 下载地址 API文档 在程序中使用的步骤 第一步:引入beautyeye_lnf.jar包 第二步:在代码中使 ...

  10. iOS 蓝牙开发 BabyBluetooth蓝牙库介绍

    BabyBluetooth 是一个最简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容iOS和Mac OS X. 特色: 基于原生CoreBluetooth框架封装的轻量级的开源库,可以帮 ...

最新文章

  1. 零基础参加软件测试培训需要学多长时间
  2. java 中线程的创建方式
  3. 基于OHCI的USB主机 —— OHCI(设计思路)
  4. ajax mysql项目 react_React视频教程来啦,每周末都有前端视频教程学
  5. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
  6. css 字体字体图标_CSS基础知识:了解字体
  7. P3279-[SCOI2013]密码【Manacher】
  8. [转]Understanding Integration Services Package Configurations
  9. 单片机拟真电路图软件_DIY AT89S52单片机编程器
  10. EasyUI,TopJUI的datagrid显示图片并点击放大浏览
  11. 零起点学习Linux系列培训视频-寒冰作品
  12. 环境保护设施运营组织服务认证
  13. Go语言为什么值得学习?
  14. 【Spring】定时任务
  15. linux fastq.gz文件如何解压,科学网—批量gzip,ungzip快速压缩和解压fastq文件 - 陈明杰的博文...
  16. 人体部位检测:BodyHands
  17. html5这么盒子页面居中,实现盒子居中
  18. 计算机与化学参考文献,实验学生论文,关于计算机对化学实验课的辅助作用相关参考文献资料-免费论文范文...
  19. jQ模拟逐帧动画动画
  20. 逻辑回归算法之梯度算法

热门文章

  1. Shiro:初识Shiro及简单尝试
  2. python中的进程(二)
  3. 云中树莓派(3):通过 AWS IoT 控制树莓派上的 Led
  4. split() 注意事项.
  5. hdu-5656 CA Loves GCD(dp+数论)
  6. BZOJ3757: 苹果树【树上莫队】
  7. [Error]Python虚拟环境报错 OSError: setuptools pip wheel failed with error code 2
  8. 整理数组去重与数组排序等方法
  9. 专场介绍 | 第12届中国R会议(北京)生物信息专场
  10. R语言模拟:Bias Variance Trade-Off