Tangram系列(一)iOS Tangram入门

iOS入门

timg.jpeg

Tangram2.0库

Android

Tangram-Android
Virtualview-Android

iOS

Tangram-iOS
Virtualview-iOS

tangram 使用的工具类
virtualview_tools

Tangram

ios的Tagram总体由四部分构成:Core,Layout,EventBus,Helper


13399000.jpg
1、Core

Tangram的复用和回收机制是由core负责的。主要的原理就是使用了LazyScroll(底层是UIScrollView),就是先把LazyScroll里面所有需要回收复用的视图的绝对坐标先整理出来,然后在LazyScroll滚动的时候,查找哪些视图需要回收,哪些视图需要复用。core主要是TangramView。

TangramView的核心方法:


15752663230718.jpg
2、LayOut

LayOut主要负责处理内部组件摆放的位置。布局需要实现TangramLayoutProtocol。它的核心方法是calculateLayout,这里面需要安排内部ViewModel的位置,决定后面要生成的视图要如何摆放。
Tangram有丰富的内置布局可供选择,比如 流式布局、一拖N的、浮标、固定、吸顶、吸底、轮播、线性滚动、瀑布流等布局,当然布局也可以自行拓展。因为有些布方式比较特殊,TangramView会对它们有特殊的处理逻辑。

布局样式:


15749110216877.jpg

内置的布局类型,可以参考
http://tangram.pingguohe.net/docs/layout-support/inner-support

3、EventBus

事件总线用于组件和Controller,layout、TangramView之间的通信。点击、曝光就是典型的事件总线使用场景。
事件总线的使用方法:


15749109334425.jpg
4、Helper

Helper的作用是简化代码,快速生成布局、组件。

Helper具体是指TangramDefaultDataSourceHelper, 这个解析器具备以下功能:

  • 快速解析layout---(NSDictionary -> layout实例)
  • 快速解析Model-----(NSDictionary -> model实例)
  • 从model快速生成element----(model实例 ->组件实例)
  • 用新的model刷新即将被复用的element
15752573326331.jpg

TangramDefaultDataSourceHelper实际上是串联起来了三种类型的工厂类,每种各需要一个。Helper在这三个工厂提供的API基础上,再封装成更易于使用的API。这三个工厂默认的是

  • TangramDefaultLayoutFactory
  • TangramDefaultItemModelFactory
  • TangramDefaultElementFactory
15752581576050.jpg

VirtualView

VirtualView简介

VirtualView 是 Tangram 2.0 库中的一个重要组成部分。是Tangram模型在V2.0补充的UI开源库。

VirtualView的作用
解决Tangram V1.0中加载性能低和UI组件没有办法动态更新的问题。

VirtualView的功能

  1. 使用Canvas绘制视图,创建虚拟化组件
  2. 通过XML快速的创建界面模版
  3. 客户端运行时动态加载XML模版,从而渲染界面

15754410484609.jpg

VirtualView被称为虚拟组件的原因
1、使用canvas绘制视图
2、不存在实际的view,依赖于宿主容器视图
3、VirtualView不想我们平常使用的一些控件,比如Label,Button等等

15754427907248.jpg

VirtualView的主要流程

提供了用 XML 去书写 UI 组件的方案,然后动态化下发编译好的二进制文件,最后再利用客户端内置的 SDK 来解析展示这些 UI 组件。

VirtualView的主要流程:


15752725196473.jpg

流程:

  1. 编写业务组件模板
  2. 通过工具将模板数据编译成二进制数据。注意加载 XML 并不是直接加载原始 XML 文件,而是先通过 virtualview_tools 编译成一段二进制数据,生成后缀为 .out的文件。
  3. 下发到客户端。客户端加载二进制数据可以有两种路径:
    第一种:直接将编译结果打包到客户端里加载,
    第二种:是发布到模板管理后台cdn上,让客户端去下载,在线更新到模版数据。
  4. 加载解析二进制数据。不论是那种方式加载二进制数据,客户端的工作都需要解析二进制数据,比如校验版本号,合法性,读取头信息等等。
  5. 创建组件视图。会根据组件名称找到二进制数据,通过上面介绍过的Helper工具解析并且创建出真正的组件模型数据。
  6. 绑定业务数据。用户需要获取到业务数据绑定到组件上,组件的属性里可以写表达式来指定使用哪一个数据字段。
  7. 显示,组件结合业务数据渲染在视图上面。

VirtualView的特点

15754284596053.jpg

1、渲染性能高。渲染出来的视图结构呈现扁平化。
2、组建热更新。可以通过配套的xml模版来更新sdk;可以动态更新组件和界面。
3、跨平台。一套xml模版,可以android、iOS俩个不同的平台使用。
4、兼容性好。可以支持加载、渲染原生基础组件;也可以解决虚拟化view带来的原生view的能力损失的问题。
5、使用方便。它内置了一系列基础组件可以直接被使用;也支持数据绑定的表达式。也可以在样式动态化。数据动态化的场景下能非常方便地实现业务需求。

参考文件

https://www.jianshu.com/p/48764ff8449f

https://www.jianshu.com/p/cd634106f533

http://pingguohe.net/2017/04/24/tangram-ios-structure.html

http://tangram.pingguohe.net/docs/ios/tangram-core

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容