跳转至

GUI

基本概念

我对 GUI 应用的定义就是有 图形界面,并直接运行在移动操作系统/桌面操作系统中的应用。这个定义排除了 Web 应用(因为运行在浏览器里),但并没有排除游戏应用。不过通常还是会把游戏单独归为一类应用,尽管大多数技术是相通的

主要技术

图形 API

要实现 GUI,通常要使用操作系统提供的 图形 API。不过图形 API 属于较低层次的抽象,很多常用的 UI 组件都还得自己去实现。好在有 GUI 框架可以帮助我们减少代码量。

目前主流的图形 API 有 OpenGL/Vulkan/DirectX/Metal 这几种。不同的操作系统对于各种图形 API 支持程度不同,因此造成了应用跨平台的困难。同样好在有 GUI 框架可以自动处理这些问题,帮助应用更好的跨平台。

GUI 框架

GUI 框架是比图形 API 更高层次的抽象。有些操作系统已经提供了包含 GUI 框架的 SDK,不过这通常都只有特定语言的接口,比如 Android 是 Kotlin,iOS 是 Swift,Windows 是 C#。对于那些想要只用一套代码实现跨平台的应用,通常会使用社区里的解决方案。

Web 技术

也许你可以考虑使用 Web 技术来开发需要 GUI 的移动/桌面应用,有很多 框架 可以做到这一点。

以下是一些 Web 技术和图形 API 的简单对比,部分参考了 Electron 官网的对比,也许可以给你一些启发

适合 图形 API 的场景

  1. 性能极其敏感
  2. 需要深度操作系统集成
  3. 应用在资源受限的环境运行
  4. 目标平台明确且单一

适合 Web 技术 的场景

  1. 应用以内容展示和交互逻辑为主
  2. UI 复杂度高且需要频繁迭代
  3. 对安装包体积和内存占用不敏感
  4. 想利用 Web 强大的生态和跨平台能力

当然了,Web 技术一直在发展,很多传统上不适合 Web 的场景现在也可以选择 Web 了。因此上述的简单对比随时可能迎来反转。我个人认为投资 Web 绝对不会错,Web 统一前端指日可待。

框架

  • Flutter 由 Google 开发的开源 UI 工具包,使用 Dart 语言,最适合用于移动应用,其它平台的生态还在发展中
  • Qt 一个 C++ 的跨平台应用框架,提供了许多语言的接口绑定,一般用于桌面端应用
  • MAUI 微软推出的跨平台应用框架,使用 C#,集成了 .NET 生态,可用于开发桌面/移动应用
  • ImGUI C++ 的轻量级图形框架,通过配置不同的后端可以实现跨平台
  • Tkinter Python 自带的 GUI 框架