GICXMLLayout
介绍
GICXMLLayout
简称gic
,是一个使用XML描述UI的库,同时具备MVVM功能。gic
能做什么?
- 使用XML描述UI、动画等。
- 纯净的MVVM
- 支持
数据绑定
,类似于h5中Vue
提供的数据绑定能力。 - 支持
模板功能
,类似于h5中的模板功能。 - 支持JS直接操作元素,并支持使用JS编写业务逻辑(支持ES6规范)。
- 强大的布局系统,甚至提供flex等复杂高效的布局。
- 强大的自定义能力,能够允许开发者根据需要扩展出可直接用XML描述的任意功能。
- 具有局部替换能力,可以对现有项目进行局部替换,使局部功能具备MVVM+XML的能力。
- 由于其直接使用XML描述,因此天生具备实时更新的能力。
gic
的布局系统以及UI系统是基于Texture
开发的,因此天生具有强大的性能优势。
在线文档
安装
GICXMLLayout可以通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中:
pod 'GICXMLLayout', '~> 0.5.0'
IDE与脚手架支持
GICXMLLayout
已经提供了配套的IDE开发工具和脚手架支持,方便您更快地创建项目和开发。
IDE
目前GICXMLLayout
在VSCode
中开发了一款插件,名字叫GICVSCodeExtension
,你可以在VSCode的插件市场中搜索并直接安装,支持XML智能提示、JavaScript
编译、热重载
、热更新测试
等功能。
脚手架
-
执行以下命令安装脚手架。(请确保已安装nodejs和npm)
sudo npm install gicxmllayout-cli -g
-
执行以下命令,创建
GIC
工程。gic init YourProject
-
根据提示进行模板选择及安装。
安装完成后,搭配VSCode
进行开发将极大地提升开发效率。
Swift支持
从0.2.1
版本开始,GICXMLLayout
支持Swift语言。但由于GICXMLLayout
本身是基于OC开发的,因此在Swift中使用时需要使用桥接。以下为操作步骤:
-
创建一个头文件,例如:
Bridging-Header.h
-
在头文件中添加如下头文件引用。
#ifndef Bridging_Header_h #define Bridging_Header_h #import <GICXMLLayout/GICXMLLayout.h> #endif /* Bridging_Header_h */
-
进入项目的
build settings
,然后找到Objective-C Bridging Header
选项,将头文件路径添加上去。例如:
这样就可以在Swift
中使用GICXMLLayout
。
另外一个需要注意的点是:
-
所有ViewModel都必须继承自
NSObject
-
由于在Swift 4中,继承自NSObject的Swift class 不再默认 Bridge 到 OC,因此需要在class前加上
@objcMembers
这个关键字。例如:@objcMembers class ViewModel: NSObject { ... }
-
不支持对Int? Float?等值类型进行可空解析。在定义swift class时避免使用可空类型的值类型。但是String、Array、Dictionary可以定义为可空类型。
实际上,不只是ViewModel需要遵循上述规则,所有在ViewModel中使用到的class都必须遵循上述规则。
更新日志
0.1.1
-
新增样式(style)功能。文档
你现在可以为UI元素添加样式了,你还可以将样式定义在单独的XML文件中,这样你就可以为你的APP添加类似主题(theme)的功能。
0.2.0
-
增加
canvas
元素,目前处于beta
阶段,但已经可以使用。canvas文档你现在可以直接使用
xml
来实现类似Core Graphics
的功能了。你甚至可以直接使用canvas
来实现一个报表,还支持动画呢。 -
对
input
元素增加keyboard-type
的支持。文档 -
增加
control
元素。文档control
的功能类似UIControl
,提供enable
、highlight
、selected
等状态管理。 -
增加
元素。文档
现在可以直接将一大段json字符串作为数据源添加到
data-context
中。 -
增加
router
模块。文档
0.2.1
增加对Swift的支持
0.2.2
-
label
元素增加对font
属性的支持,现在可以为label
指定字体。文档 -
canvas
元素中的path
新增dash
属性,现在可以为线条添加虚线设置。文档 -
调整事件分发机制。增加
double-tap
、touch-begin
、touch-move
、touch-end
事件。文档目前已经将touch事件优化成直接使用系统本身提供的事件分发机制。
0.3.0
这个版本是因为涉及到对js的支持,所以比之前的版本在开发时间和难度上都要大。
-
list元素添加对header和footer的支持。文档
-
list元素添加对section的支持。文档
支持多个section。当然也支持数据绑定。现在的list功能已经很接近
UITableView
提供的功能了。注意:在使用方式上与之前基本无差别,但需要将原来的
list-item
放入某个section
元素中。不再支持裸的list-item
。 -
新增
collection-view
。文档功能上类似
UICollectionView
,list支持的功能collection-view
同样支持。 -
新增
script
元素,提供对js的支持。文档现在您可以直接使用js来操作UI元素的属性,甚至使用JS来实现业务逻辑。
0.3.1
-
新增
grid-panel
布局。文档布局效果类似collecttion-view,只是
grid-panel
没有滚动条,适合在list、collection-view等列表的list-item中使用。会自动计算内容高度。 -
Script新增对setInterval、clearInterval的支持。
0.3.2
-
为
Script
增加JSAPI注册器。以便扩展JSAPI文档现在你可以通过
GICJSAPIManager
来为动态添加JSAPI,以便形成你自己的一套独有的JSAPI集合。 -
list
、collection-view
所有的section都支持添加header、footer。文档 -
动画触发条件支持任意事件。文档
0.4.0
-
增加JSRouter相关API,专门用来支持JS 导航相关。文档
-
Router模块中的
nav-bar
元素增加title
子元素现在你可以通过
nav-bar
的title
节点自定义page的title-view -
image
元素新增path
属性。文档现在可以直接加载根目录下的图片
-
JS API修改.文档
- 获取事件参数。可以通过$eventInfo获取事件参数
- 增加
require
函数。现在可以在任意JS脚本的任意位置动态加载js文件
-
list元素增加显示索引功能。并且进一步的优化了显示性能。文档
0.4.2
-
for指令增加对数组的insert支持。
- NSMutableArray增加对方法
insertObjects:atIndexes:
的支持。 - JS数组目前对splice方法的已经得到完整支持。
- NSMutableArray增加对方法
-
bug修复。
0.4.3
- 新增JS调用Toast提示的API
- 增加了对Spring动画的支持。
0.4.4
- 新增
transforms
形变元素。文档
0.4.5
-
JSRouter
增加返回层级的参数。文档你现在可以选择返回的页面层级了。
0.4.6
0.4.8
-
for指令支持遍历JS对象。
-
完善
require
函数。用法相当于node.js中的用法 -
内置
Promise
API -
支持
yield
以及generator
。现在GIC已经可以支持ES8中的
async
、await
了。
0.5.0
-
新增附加属性系统。文档
-
grid-panel
和collection-view
增加column-span
附加属性。 -
触摸事件的
eventInfo
增加touch point。 文档代码中使用
$eventInfo
来访问
GICXMLLayout可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。