VirtualView 原理
总结: VirtualView就是一个view,通过模版创建,可以绑定数据
流程:xml-编译xml-动态下发组件-组件加载-保留创建组建树能力-创建组建树-vvcontainerview-绑定数据-计算尺寸-重新设置尺寸size
组件:uiview、calayer、图、文
计算元素layout布局、addsubview、addsublayer,共享唯一跟视图、唯一根calyer、扁平化结构绘制
组件三大件:显示内容、子组件布局排版组装、事件交互
virtualview,基于uiview、calyer、hittest、gesture重新定义uiview
VVTemplateManager 模版管理器 ( 一堆模版加载器, 对应模版版本 )
VVTemplateBinaryLoader 模版加载器 ( 具有还原成node的能力, 对应为一个xml out 描述模版)
VVBaseNode 模版node树, 何为node,他不是UIView,他是NSObject,但是实现了类似UIView的树形套装方法,通过addSubview,addSubLayer给其容器view增加子视图, 在容器视图中使用其持有的的UIVIew/CALayer显示界面
1、就是实现了cocoaview, 视图, 无非就是 线条(UIView)、文本(UILabel)、图片(UIImageView) 所组成
2、VVLayer(CALayer) VVLineLayer (CALayer) 可以局部刷新 kvo
3、VVLayout 其实就是node的集合.....
4、所有子节点都是CALayer or UIView,都被添加到根视图cocoaView上
VVLineLayer
CALayer
VVLayer
CALayer
VVLabel
UILabel
VVLoopingScrollView
UIScrollView
VVBaseNode
NVImageView---无layoutSubNodes UIView+UIImageView
NVLineView----UIView+VVLineLayer(CALayer)
NVTextView---VVLable(CALayer)
VVLayout---无layoutSubNodes
VVGridLayout
VVGridView
VVFrameLayout
VVPageView
NVFrameLayout
VVRatioLayout
NVRatioLayout
VVVHLayout
NVVHLayout
VVVH2Layout
NVVH2Layout
VVViewContainer容器, 所有node在此集合------
(_rootNode.rootCanvasLayer = self.layer;
_rootNode.rootCocoaView = self;)
1、使用UIView、CALayer、hitTest+Gesture重新定义了全新的VIEW结构
2、相比UIView作用是: 使用node一键生成
3、使用kvc对node节点进行数据更新:updateData
4、计算尺寸:estimatedSize