GUI 框架
基本单元是控件。
控件
负责界面元素数据的存储和更新,原始数据都存储在空间的属性上,直接更新控件的属性就能够完成界面元素更新操作,控件的属性设置成不同的 值会让界面元素呈现不同的外观。
渲染树
记录控件之间的关系。关注界面的布局,控件在界面中的位置和大小
渲染层树
由渲染层对象组成,根据GUI框架的优化条件来确定创建哪些渲染层对象,每次新创建一个渲染层对象就会去设置它的父对象和兄弟对象。渲染层对象创建完毕,接下来就需要将各渲染层对象里的控件按照渲染树布局生成Bitmap。
渲染流程
一般会经过布局,渲染,合成三个阶段。
布局
布局阶段依据渲染树计算出控件的大小和位置。
渲染
渲染阶段利用图形函数计算出界面的内容。一般,2D平面的渲染使用CPU计算,对3D空间的渲染使用GPU计算。
合成
合成阶段主要是合并图层。主要是为了节省显示内存,只显示一屏需要的像素,也只进行这些像素数据的计算,再对所有数据进行光栅化处理,最后交给GPU渲染你可以看到的Bitmap。
各框架
WebKit
WevKit 框架包括了 WebCore 和 JavaScriptCore,使用 HTML CSS 进行布局,使用 JavaScript 编写程序。
WebCore
解析HTML后会产生 DOM Tree,解析CSS会产生CSS Rule Tree,JavaScript会通过DOM API 和 CSS Object Model API 来操作 DOM Tree 和 CSS Rule Tree
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供外部使用。