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

你可能感兴趣的:(VirtualView 原理)