Wrappres' Studio.

GUI 框架

字数统计: 677阅读时长: 2 min
2020/02/16 Share

GUI 框架

基本单元是控件。

控件

负责界面元素数据的存储和更新,原始数据都存储在空间的属性上,直接更新控件的属性就能够完成界面元素更新操作,控件的属性设置成不同的 值会让界面元素呈现不同的外观。

渲染树

记录控件之间的关系。关注界面的布局,控件在界面中的位置和大小

渲染层树

由渲染层对象组成,根据GUI框架的优化条件来确定创建哪些渲染层对象,每次新创建一个渲染层对象就会去设置它的父对象和兄弟对象。渲染层对象创建完毕,接下来就需要将各渲染层对象里的控件按照渲染树布局生成Bitmap。

img

渲染流程

一般会经过布局,渲染,合成三个阶段。

布局

布局阶段依据渲染树计算出控件的大小和位置。

渲染

渲染阶段利用图形函数计算出界面的内容。一般,2D平面的渲染使用CPU计算,对3D空间的渲染使用GPU计算。

合成

合成阶段主要是合并图层。主要是为了节省显示内存,只显示一屏需要的像素,也只进行这些像素数据的计算,再对所有数据进行光栅化处理,最后交给GPU渲染你可以看到的Bitmap。

各框架

WebKit

WevKit 框架包括了 WebCore 和 JavaScriptCore,使用 HTML CSS 进行布局,使用 JavaScript 编写程序。

WebCore

74

解析HTML后会产生 DOM Tree,解析CSS会产生CSS Rule Tree,JavaScript会通过DOM API 和 CSS Object Model API 来操作 DOM Tree 和 CSS Rule Tree

47

Flutter

Google公司于2017年推出的一个移动应用开发的GUI框架,使用Dart语言编写程序,一套代码可以同时运行在 iOS 和 Android 平台。

Texture

框架的基本单元是基于 UIView 抽象的节点 ASDisplayNode。和 UIView不同的是,ASDIsplayNode 是线程安全的,可以在后台线程上并行是实例化和配置整个层级结构。

Texture 的优势

Node的异步渲染

Texture 最大的优势就是开发了线程安全的ASDdisplayNode,而且还能够很好的和UIView共生。可以在原来使用UIView开发的程序基础上使用Texture,不用完全重构所有界面。

在 Cocoa Touch 框架里,当CALayer内容更新是会去找CALayer的delegate,也就是dispalyLayer:方法。UIView会实现displayLayer:这个delegate方法。UIView里实现drawReact:这个delegate方法能够自定义CALayer。

在 Texture 中,ASDisplayNode 替代了这个delegate,解耦了UIView和CALayer,并将UIView包装成ASDisplayView,将CALayer包装成ASDisplayLayer供外部使用。

CATALOG
  1. 1. GUI 框架
    1. 1.1. 控件
    2. 1.2. 渲染树
    3. 1.3. 渲染层树
  2. 2. 渲染流程
    1. 2.1. 布局
    2. 2.2. 渲染
    3. 2.3. 合成
  3. 3. 各框架
    1. 3.1. WebKit
      1. 3.1.1. WebCore
    2. 3.2. Flutter
    3. 3.3. Texture
    4. 3.4. Texture 的优势
      1. 3.4.1. Node的异步渲染