# TLiOS26LiquidGlassDemo **Repository Path**: leecj/TLiOS26LiquidGlassDemo ## Basic Information - **Project Name**: TLiOS26LiquidGlassDemo - **Description**: 本文针对iOS26的新技术展开分析,重点研究了苹果6月发布的Liquid Glass(液态玻璃)特性及其适配期限(WWDC视频中有详细说明)。旨在帮助公司iOS项目提前做好适配准备,充分兼容iOS26的新功能。 - **Primary Language**: Swift - **License**: Apache-2.0 - **Default Branch**: dev/1.0.0 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-12 - **Last Updated**: 2025-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TLiOS26LiquidGlassDemo 本项目旨在深入研究并实践 **iOS 26** 中引入的新特性,特别是苹果在 WWDC 上发布的 **Liquid Glass(液态玻璃)** 效果。通过提前适配与探索,帮助公司 iOS 项目兼容 iOS 26 的新功能,并为后续正式上线做好技术储备。 ## 🎯 项目目标 - 深入分析 iOS 26 新特性,尤其是 Liquid Glass 的实现机制; - 提供可运行的 Demo 示例,展示新技术的实际效果; - 提前验证适配方案,降低未来升级至 iOS 26 的风险; - 形成内部技术文档,辅助团队快速掌握新特性。 --- ## 🎬 演示效果 ### 应用主页界面 ![应用主页界面](docs/home.PNG) ### 完整功能演示 ![功能演示](docs/screen_recording.gif) --- ## 📌 功能模块概览(带技术细节) | 功能模块 | 对应页面 | 简要说明 | 技术要点 | |----------|-----------|-----------|-----------| | Xcode 26 新特性与 iOS 26 适配指南 | - | 展示 Xcode 26 工具链更新及 iOS 26 开发环境配置 | 支持 SF Symbols 7、MainActor 安全通知、`updateProperties()` 生命周期等新特性 | | `@ObservableObject` 使用指南 | `TLObservableObjectViewController` | 实践 SwiftUI 与 UIKit 混编下基于 `@ObservableObject` 的状态管理与数据绑定 | 利用 `@ObservableObject` 和 `@Published` 实现跨组件响应式更新 | | `updateProperties()` 生命周期优化 | `TLUpdatePropertiesViewController` | 探索新版 UIViewController 生命周期方法 `updateProperties()` 的使用场景与适配方式 | 在 `updateProperties()` 中刷新 UI;通过 `setNeedsUpdateProperties()` 触发异步更新机制 | | iPadOS 菜单栏(Menu Bar)支持 | `TLPadOSMenuViewController` | 针对 iPadOS 17+ 的菜单栏交互适配与演示 | 使用 `UIMenuBarSystemItem` 构建系统级菜单项,适配深色/浅色模式 | | 通知系统增强 | `TLNotificationCenterViewController` | 展示 iOS 26 中通知中心 API 变化及响应式处理,支持 MainActor 安全接收消息 | 使用 `NotificationCenter.MainActorMessage` 协议确保在主线程安全回调中更新 UI | | UINavigationController 样式与行为更新 | `TLUINavigationViewController` | 探索 iOS 26 下导航栏样式、副标题、角标、工具栏按钮等新特性的适配 | 使用 `navigationItem.largeTitle` / `largeSubtitle` 设置大标题与子标题;使用 `UIBarButtonItem.badge` 添加角标 | | iOS 26 适配指南 - `UITabBarController` | `TLTabBarController` | 探索 iOS 26 中 UITabBarController 的样式、交互及生命周期变化,提供兼容性适配方案 | 支持透明度调整、手势优先级控制、自定义 TabBar 外观渲染 | | SF Symbols 7 支持与动画切换 | `TLSFSymbols7ViewController` | 展示 iOS 26 中 SF Symbols 7 图标动态切换效果及过渡动画实践 | 使用 `UIImage(systemName:)` 加载 SF Symbols,并结合 `UIView.transition` 实现图标切换动画 | | 动画系统增强与自定义转场 | `TLAnimatorViewController` | 展示 iOS 26 中动画系统的增强功能及自定义转场动画实现 | 使用 `UIViewPropertyAnimator` 实现高级动画控制;支持交互式转场动画和弹簧动画效果 | | 视图圆角配置与动态调整 | `TLViewCornerConfigViewController` | 实现 iOS 26 中视图圆角的动态配置与实时预览,支持多种圆角样式 | 使用 `UIView.cornerRadius` 和 `cornerCurve` 属性实现自定义圆角效果;支持实时调整和预览 | | 图像处理与动态效果 | `TLImageViewController` | 展示 iOS 26 中图像处理新特性及动态效果实现 | 使用 `UIImage.preparingForDisplay()` 优化图像渲染;实现图像动态模糊和色彩调整 | | 视觉效果增强与液态玻璃风格实现 | `TLVisualEffectViewController` | 实现 iOS 26 中液态玻璃风格的视觉效果,展示高级视觉效果的配置与优化 | 使用 `UIVisualEffectView` 实现动态模糊和透明效果;结合 `CALayer` 属性创建自定义视觉效果 | | UIButton Liquid Glass 风格与符号动画 | `TLButtonViewController` | 展示 iOS 26 中 UIButton 的 Liquid Glass 风格和 SF Symbols 动画切换效果 | 使用 `UIButton.Configuration.glass()` 系列配置方法和 `symbolContentTransition` 属性实现新视觉效果 | | UIViewController 转场效果扩展 | `TLTransformSceneViewController` | 展示 iOS 26 中 UIViewController 转场效果的扩展,特别是 zoom 转场支持 UIBarButtonItem 触发 | 使用 `preferredTransition = .zoom` 配置转场效果;通过闭包返回触发转场的 `UIBarButtonItem` | | 动态应用图标切换 | `TLAppIconViewController` | 实现运行时动态切换应用图标功能,支持 Liquid Glass 风格的应用图标 | 使用 `UIApplication.shared.setAlternateIconName()` 方法切换图标;通过 Icon Composer 创建符合规范的图标资源 | | UISlider 刻度支持 | `TLUISliderViewController` | 展示 iOS 26 中 UISlider 的新特性,包括刻度支持和自定义样式 | 使用 `sliderStyle` 和 `trackConfiguration` 属性实现带刻度的滑块控件 | | HDR 颜色支持 | `TLColorViewController` | 展示 iOS 26 中对 HDR 颜色的支持,包括 UIColor、UIColorWell 和 UIColorPickerViewController 的 HDR 功能 | 使用 `UIColor(red:green:blue:alpha:exposure:)` 创建 HDR 颜色;配置 `maximumLinearExposure` 和 `supportsEyedropper` 属性 | --- ## 🔧 各模块技术说明章节 ### 1. `@ObservableObject` 使用指南 ```markdown ### 💡 技术要点 - **`@ObservableObject` 支持 UIKit**: 在 UIKit 场景中使用 `@ObservableObject` 进行状态共享,适用于混编项目中的统一状态管理。 - **`@Published` 自动触发更新**: 当模型属性被标记为 `@Published`,其变更会自动触发观察者的更新逻辑。 - **性能优化建议**: 尽量避免频繁修改 `@Published` 属性值,可使用 `debounce` 或 `throttle` 控制更新频率。 ``` --- ### 2. `updateProperties()` 生命周期优化 ```markdown ### 💡 技术要点 - **新的生命周期方法**: `updateProperties()` 是 iOS 26 引入的新方法,用于集中更新 UI 元素的状态,替代部分 `viewDidLayoutSubviews()` 的职责。 - **手动触发更新**: 使用 `setNeedsUpdateProperties()` 标记视图控制器需要更新,在下一个绘制周期中调用 `updateProperties()`。 - **异步安全刷新**: 该方法保证在主线程执行,适合用于刷新依赖模型状态的 UI 元素。 ``` --- ### 3. iPadOS 菜单栏(Menu Bar)支持 ```markdown #### 💡 技术要点 - **系统级菜单栏支持**: iPadOS 26 中应用默认拥有类似 macOS 风格的菜单栏,用户可通过从屏幕顶部向下滑动调出。 - **自定义菜单项**: 使用 `UIMainMenuSystem` 和 `UIKeyCommand` 添加自定义菜单项和快捷键,提升应用可用性。 - **菜单组织结构**: 通过 `UIMenu` 组织子菜单项,支持插入到系统菜单的不同位置,保持界面一致性。 - **键盘快捷键支持**: 为菜单项配置键盘快捷键,提升专业用户的操作效率。 ``` --- ### 4. 通知系统增强 ```markdown ### 💡 技术要点 - **MainActor 安全回调**: 使用 `NotificationCenter.MainActorMessage` 协议定义的消息类型,确保回调始终运行在主线程,无需手动调度。 - **结构化通知设计**: 使用泛型注册监听器,提高代码可读性和安全性,避免字符串命名错误。 - **资源释放规范**: 在 `deinit` 中移除监听器,防止内存泄漏。 ``` --- ### 5. UINavigationController 样式与行为更新 ```markdown ### 💡 技术要点 - **新增副标题与大标题支持**: `UINavigationItem.largeTitle` 和 `largeSubtitle` 支持设置大标题和子标题,提升视觉层次。 - **BarButtonItem 角标与样式**: `badge` 属性可用于显示未读数或提醒;`style = .prominent` 提升按钮的视觉优先级。 - **灵活间距控制**: 使用 `UIBarButtonItem.fixedSpace(_:)` 和 `flexibleSpace()` 控制工具栏按钮间距,增强布局灵活性。 ``` --- ### 6. SF Symbols 7 支持与动画切换 ```markdown ### 💡 技术要点 - **SF Symbols 7 特性**: 支持多层渲染、动态颜色、变体样式等高级特性,适用于液态玻璃风格的图标展示。 - **图标切换动画**: 使用 `UIView.transition(with:duration:options:animations:)` 实现图标平滑切换动画,提升用户体验。 - **SymbolConfiguration 应用**: 通过 `.applyingSymbolConfiguration()` 修改图标大小、权重、层级等属性。 ``` --- ### 7. 动画系统增强与自定义转场 ```markdown #### 💡 技术要点 - **高级动画控制**: 使用 `UIViewPropertyAnimator` 实现对动画的精细控制,支持暂停、恢复、反转等操作。 - **交互式转场动画**: 通过 `UIViewControllerTransitioningDelegate` 实现自定义交互式转场动画,提升用户体验。 - **弹簧动画效果**: 利用 `UISpringTimingParameters` 创建自然的弹簧动画效果,符合液态玻璃的交互设计理念。 - **动画性能优化**: 合理使用 `CADisplayLink` 和 `CADTransaction` 确保动画流畅性,避免掉帧问题。 ``` --- ### 8. 视图圆角配置与动态调整 ```markdown #### 💡 技术要点 - **动态圆角配置**: 使用 `UIView.cornerRadius` 属性实现视图圆角的动态调整,支持实时预览效果。 - **圆角曲线控制**: 通过 `UIView.cornerCurve` 属性控制圆角的曲线类型,包括连续圆角和经典圆角等样式。 - **液态玻璃风格适配**: 结合 iOS 26 的液态玻璃设计理念,实现与系统风格一致的圆角视觉效果。 - **性能优化建议**: 对于复杂视图的圆角处理,建议使用 `CAShapeLayer` 避免离屏渲染,提升渲染性能。 ``` --- ### 9. 图像处理与动态效果 ```markdown #### 💡 技术要点 - **图像预处理优化**: 使用 `UIImage.preparingForDisplay()` 方法优化图像渲染性能,减少主线程负担。 - **动态模糊效果**: 利用 `CIGaussianBlur` 和 `CIContext` 实现图像的动态模糊效果,支持实时调整模糊半径。 - **色彩调整功能**: 通过 `CIColorControls` 滤镜实现图像的亮度、对比度和饱和度调整。 - **液态玻璃风格融合**: 结合视图圆角和透明度效果,实现与液态玻璃设计理念一致的图像展示效果。 ``` --- ### 10. 视觉效果增强与液态玻璃风格实现 ```markdown #### 💡 技术要点 - **液态玻璃视觉效果实现**: 使用 `UIVisualEffectView` 结合 iOS 26 新增的视觉效果样式,实现液态玻璃风格的界面设计,支持动态模糊和透明度调整。 - **自定义视觉效果配置**: 通过 `UIVisualEffect` 子类和 `CALayer` 属性,创建符合液态玻璃设计理念的自定义视觉效果,包括多层次透明度和动态光效。 - **性能优化策略**: 合理管理 `UIVisualEffectView` 的使用,避免过度渲染导致的性能问题;使用 `shouldRasterize` 优化复杂视觉效果的渲染性能。 - **与其他 UI 元素的协调**: 确保视觉效果与圆角、阴影等其他 UI 属性协调统一,实现整体界面的一致性和美观性。 ``` --- ### 11. UIButton Liquid Glass 风格与符号动画 ```markdown #### 💡 技术要点 - **Liquid Glass 风格配置**: iOS 26 为 `UIButton` 引入了四种新的配置方法来实现 Liquid Glass 风格: - `UIButton.Configuration.glass()` - 标准玻璃风格 - `UIButton.Configuration.clearGlass()` - 透明玻璃风格 - `UIButton.Configuration.prominentGlass()` - 突出玻璃风格 - `UIButton.Configuration.prominentClearGlass()` - 突出透明玻璃风格 - **SF Symbols 动画切换**: 通过 `UIButton.Configuration` 的 `symbolContentTransition` 属性配置符号切换动画,支持多种过渡效果如 `.replace`、`.crossDissolve` 等,并可调整动画速度。 - **符号动画启用**: 使用 `UIButton.isSymbolAnimationEnabled` 属性启用或禁用 SF Symbols 的动画效果,增强用户交互体验。 - **与液态玻璃设计理念融合**: 结合 iOS 26 的液态玻璃设计理念,实现具有折射质感和半透明效果的按钮界面,提升整体视觉一致性。 ``` --- ### 12. UIViewController 转场效果扩展 ```markdown #### 💡 技术要点 - **扩展的转场触发方式**: iOS 26 扩展了 `zoom` 转场效果的触发条件,现在支持通过 `UIBarButtonItem` 触发转场动画,提供更多交互可能性。 - **preferredTransition 配置**: 使用 `preferredTransition = .zoom` 配置视图控制器的转场效果,通过闭包返回触发转场的具体控件。 - **转场上下文访问**: 在转场闭包中可以访问 `context.zoomedViewController` 获取当前转场的视图控制器,实现更精细的转场控制。 - **液态玻璃风格转场**: 结合 Liquid Glass 设计理念,zoom 转场效果提供了流畅的缩放动画,增强用户体验。 ``` --- ### 13. 动态应用图标切换 ```markdown #### 💡 技术要点 - **Icon Composer 支持**: Xcode 26 内置 Icon Composer 应用,可创建符合 Liquid Glass 风格的全平台 App Icon (.icon 文件)。 - **运行时图标切换**: 使用 `UIApplication.shared.setAlternateIconName()` 方法实现在运行时动态切换应用图标。 - **图标资源管理**: 通过 `AppIcon` 枚举管理不同图标资源,使用 `UIApplication.shared.supportsAlternateIcons` 检查设备是否支持图标切换。 - **Liquid Glass 图标设计**: 通过 Icon Composer 创建的图标支持 Liquid Glass 设计规范,包括透明度、折射效果等视觉特性。 ``` ### 14. UISlider 刻度支持 ```markdown #### 💡 技术要点 - **新增样式支持**: iOS 26 为 `UISlider` 引入了 `sliderStyle` 属性,支持 `.default` 和 `.thumbless` 两种样式,提供更丰富的视觉效果。 - **刻度配置功能**: 通过 `trackConfiguration` 属性可以配置滑块的刻度,支持设置固定数量的刻度或自定义刻度位置。 - **仅允许刻度值选择**: `UISlider.TrackConfiguration` 的 `allowsTickValuesOnly` 属性可以限制用户只能选择刻度值,适用于需要精确选择的场景。 - **应用场景**: 适用于音量调节、亮度调节、进度选择、配置项选择等需要精确控制的场景。 ``` --- ### 15. HDR 颜色支持 ```markdown #### 💡 技术要点 - **HDR 颜色创建**: iOS 26 中 `UIColor` 新增了对 HDR 颜色的支持,可以通过 `UIColor(red:green:blue:alpha:exposure:)` 或 `UIColor(red:green:blue:alpha:linearExposure:)` 创建 HDR 颜色。 - **颜色选择器 HDR 支持**: `UIColorWell` 和 `UIColorPickerViewController` 都新增了 HDR 支持,通过 `maximumLinearExposure` 属性可以设置最大曝光值。 - ** eyedropper 功能控制**: 通过 `supportsEyedropper` 属性可以控制是否支持颜色吸取功能,提供更多自定义选项。 - **视觉效果提升**: HDR 颜色可以展现更丰富的色彩层次和更亮的高光细节,提升用户界面的视觉质量。 ``` --- ## 📺 参考资料 - [WWDC 2024 官方视频 - Designing for Liquid Glass](https://developer.apple.com/videos/) - [掘金专栏 - iOS 26 液态玻璃技术解析](https://juejin.cn/column/7513818640602071090) ## ✅ 项目状态 当前已完成 Liquid Glass 基础实现及其他核心模块的初步适配,支持模拟器与真机预览。后续将持续跟进 Apple 官方文档更新,完善更多交互细节。 ---