一个 GUI 系统的组成部分

在做 iOS 上的 XML+CSS UI 布局框架 CocoaUI 的过程中, 我体会到了 Apple 技术的强大之处, Apple 的底层框架和库提供了强大的功能和友好的 API, 我在开发 GUI 框架(上层 UI 框架)时用到的许多技术功能点都是信手拈来.

现在总结, 有不少想法, 记下来分享一下.

首先, iOS 系统为什么那么"好"? 不仅开发者觉得好, 最终用户用起来也觉得棒! 对比看 Android 的软件界面, 毛毛糙糙, 生硬, 总是缺了很多神韵. 这当然有屏幕硬件的功能, 但软件技术的作用更多, 因为从公开的资料上看, 不少 Android 厂商使用了和苹果同类的硬件.

再看字体渲染技术. 据说 Android 使用了某些抗锯齿字体渲染技术, 好像还用了某些自称更符合人眼的(看起来虚化)的字体渲染技术. 一小撮人觉得好, 但公道自在人心, 这些所谓的技术在体验上明显不如苹果的字体渲染技术(我个人的主观感觉就是 - 毛毛糙糙). 当初 Linux PC 的图形界面就一直缺少优秀的字体渲染技术, 所以弄得 Linux 图形界面爱好者痛苦不堪. 后来想想, 苹果从出身就在计算机字体显示和数字印刷技术上耕耘.

当然, 我觉得苹果的字体渲染技术在高分辨率上才能发挥其强项, 正如在 iPhone, Mac Retina 屏等设备上. 在非 Retina 屏的普通 Mac 屏幕上, 我还是觉得苹果的字体渲染看起来太虚, 不符合人眼的正常需求(微软的早期非虚化的字体渲染技术就非常适合低分辨率屏幕).

说了这么多, 好像我个人的偏好就是, 虚化的渲染(无论是字体还是图形线条), 就是差的计算机图形技术. 锐利的渲染技术就是先进的好的技术.

接下来说说, 如果要开发一个自己的 GUI 系统, 应该包含哪些部分? 例如, 假设你给某些只能画点和线的设备和系统开发一个 GUI 系统.

根据 iOS 的框架和技术栈来类比, 我觉得至少包含如下几个部分:

1. Core Text, 字体渲染技术

前面也说了字体对界面的作用. 我看, 字体渲染技术的积累, 是最基础最重要的积累.

2. Core Graphics, 2D 位图和矢量图引擎

用于构建各种 UI 控件, 如边框, 背景色, 阴影等等.

3. Core Animation, 动画引擎

现代的软件 UI 不再是静态的, 也需要一些动画效果来点缀, 而且动画不仅是锦上添花, 往往能起到核心竞争力.

4. Event Handling, 事件处理引擎

例如鼠标点击事件处理, 手势识别, 重力识别等等计算机输入设备的事件处理.

5, Core Audio, Core Video, 多媒体引擎

没有多媒体功能的智能设备, 已经不能称为通用消费型电子设备了.

6. WebKit, 浏览器引擎

目前的电脑, 手机等, 大部分时间是作为 Web 浏览器终端来使用的. 这方面有开源的技术可用于整合.

说到这里, 我再谈谈 CocoaUI 这个 iOS 上的 UI 开发框架. CocoaUI 是一个专注于 iOS 应用界面开发的 UI 框架, 使用类型 Web 浏览器的 HTML+CSS 布局和样式渲染技术, 当然是经过简化的功能子集和部分的自定义扩展集. 我很早就注意到了 HTML+CSS 开发程序界面技术, 当时是发现 Web 表单开发非常方便美观, 接着发现可以在桌面应用程序中内嵌 Firefox 浏览器引擎(类似现在更普遍的内嵌 WebKit 引擎).

当时确实有一些知名的桌面应用软件部分使用了 HTML+CSS 技术来开发界面, 思路也是内嵌浏览器引擎. 同期还有很多所谓的 XML UI 框架, 不过都是狗屎, 因为他们只是拿 XML 来"编程", 作为 C/C++, Java 等代码的映射, 一个真正的程序员应该知道, XML 这种描述型文法, 是不适合进行逻辑编程的, 从根子上就是错的.

CocoaUI 对 HTML+CSS 的利用类似于浏览器, 用于界面布局和样式描述, 逻辑编程当然交给逻辑型语言来处理(如 Objective-C, Swift). CocoaUI 是一个基于 iOS UI 框架的上层 UI 框架, 可以理解为对传统 GUI 框架的封装

相关推荐