@jaywcjlove: Apple系统中的渐变模糊效果(渐进式/可变模糊)https://github.com/TimOliver/BlurUIKit…
摘要
BlurUIKit是一个开源UI框架,可在iOS应用中实现渐进式和可变模糊效果,支持UIKit和SwiftUI,并且据称在App Store上安全。
查看缓存全文
缓存时间: 2026/09/16 14:10
Apple 系统的渐变模糊效果(Progressive/Variable Blur)https://github.com/TimOliver/BlurUIKit… — # TimOliver/BlurUIKit 来源:https://github.com/TimOliver/BlurUIKit # BlurUIKit 版本 SwiftPM 兼容 (https://swift.org/package-manager/) GitHub 许可证 (https://raw.githubusercontent.com/TimOliver/BlurUIKit/main/LICENSE) 平台 自 iOS 26 起,这已成为公共 API (https://developer.apple.com/documentation/uikit/uiscrollview/topedgeeffect)!太棒了!不过,如果您需要更精细的控制或需要继续支持 iOS 18,仍然可以使用本库。
BlurUIKit 是一个开源的 UI 框架,它以 App Store 安全的方式,更充分地展露了 UIKit 的动态模糊能力。具体来说,它呈现了 Apple 在系统应用中开始使用的“渐进式模糊”效果——底层内容沿渐变路径变得越来越模糊。它还提供了直接对实时 UIView 对象应用高斯模糊的能力,适用于动态的模糊-淡入淡出转场效果。
功能特性
- 为
UIView添加扩展,支持对实时视图内容启用实时高斯模糊。 - 能够在层间需要更高对比度的区域下方添加渐进式模糊渐变。
- 可选地添加“调光”颜色渐变,在需要时增强对比度。
- 调光与模糊渐变可独立配置。
- 高度优化,仅在需要时重新生成渐变蒙版图像。
- 通过
VariableBlur视图包装器支持 SwiftUI。
示例
BlurUIKit 提供了开箱即用的默认配置,但可以根据您应用的需求进行进一步调整。
UIKit
// 创建一个新的 `VariableBlurView` 实例
let blurView = VariableBlurView()
// 为彩色渐变设置色调颜色。
blurView.dimmingTintColor = .red
// 色调颜色可以“超出”模糊视图范围,以添加更平滑的过渡
blurView.dimmingOvershoot = .relative(fraction: 1.25)
SwiftUI
// 使用 VariableBlur 视图并链接修饰器
VariableBlur(direction: .down)
.dimmingTintColor(.red)
.dimmingOvershoot(.relative(fraction: 1.25))
UIView 模糊扩展
BlurUIKit 的另一项功能是能够对 UIView 实例应用高斯模糊。
// 创建一个新的 UIView 实例
let redSquare = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
redSquare.backgroundColor = .systemRed
// 应用高斯模糊
redSquare.blurRadius = 30.0
要求
BlurUIKit 应可与 iOS 14 及更高版本配合使用。在更低版本的 iOS 上可能有效,但尚未经过测试。
安装
手动安装
将 BlurUIKit 文件夹的内容复制到您应用的项目文件夹中。
CocoaPods
# 仅 UIKit(默认)
pod 'BlurUIKit'
# 包含 SwiftUI 支持
pod 'BlurUIKit/SwiftUI'
Swift Package Manager
将以下内容添加到您的 Package.swift 文件:
dependencies: [
// ...
.package(url: "https://github.com/TimOliver/BlurUIKit.git"),
],
然后添加您需要的目标依赖:
// 仅 UIKit
.product(name: "BlurUIKit", package: "BlurUIKit")
// SwiftUI 支持
.product(name: "BlurSwiftUI", package: "BlurUIKit")
这真的在 App Store 上安全吗?
简而言之:是的,对于 App Store 应该是 99.9% 安全的。如果您的应用因此库被拒绝,请提交一个 issue (https://github.com/TimOliver/BlurUIKit/issues/new)。
虽然显然您应该始终使用 Apple 提供的公共 API,但 iOS 中确实存在一个“灰色地带”,您可以在其中扩展公共 API 的功能,而不会做任何不安全的事情。Apple 一直表示,他们不希望开发者使用私有 API 的原因是,他们不保证在不同主要 iOS 版本之间,底层的任何东西会保持一致。这主要适用于像动态链接到私有框架这样明目张胆的事情。相反,即使是像遍历某个 Apple UI 组件的子视图并在其内部移动它们这样微小、无害的事情(就像我对 TONavigationBar (https://github.com/TimOliver/TONavigationBar) 所做的那样),如果这些内部视图不是公共的,也可能被视为使用了私有 API。
BlurUIKit 在私有 API 的使用方面,与遍历 Apple UI 组件内部视图属于同一范畴。它利用了 CAFilter 实际上公开暴露在 UIVisualEffectView 的一个公共属性上这一事实,我们可以访问它,然后在内存中复制以供我们使用。通过这种方式,我们可以安全地确保,由于我们没有进行任何内部运行时黑客行为或冒险的假设来访问该对象,App Review 中没有什么可检测到的(大概)。
显然,我并不太喜欢依赖这类黑客技巧,但我认为这是一个非常特殊的情况。不仅仅使用公共 API(暂且不论 SwiftUI)根本不可能实现这种视觉效果,而且 Apple 现在在主屏幕和系统应用中广泛使用它,以至于这种效果开始成为 iOS 视觉设计语言的一部分。因此,他们还没有将其设为公共 API 以便第三方开发者实现相同效果,这让我觉得很不可思议。
在 iOS 26 中,Apple 在 UIScrollView (https://developer.apple.com/documentation/uikit/uiscrollview/topedgeeffect) 上提供了一个新的 API 来实现这类效果,但我从同行开发者那里得到的初步反馈是,它非常受限。您无法更改模糊半径或渐变的大小。因此,即使在 iOS 26 中,这个库似乎仍然具有价值。
如果 Apple 能将这种效果完全作为公共 API 开放就太好了。我已经提交了 FB13949531 (https://openradar.appspot.com/FB13949531) 请求他们考虑这样做。重复该雷达报告的开发者越多,Apple 采纳的可能性就越大。如果您和我一样喜爱这种效果,请考虑重复该雷达报告。
致谢
BlurUIKit 由 Tim Oliver (http://threads.net/@timoliver) 创建,作为 iComics (http://icomics.co) 的组件。
许可证
BlurUIKit 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。
小弟调调 (@jaywcjlove): iOS 27 联系人/图片“顶部”仍然是个渐变效果 其它应用不是,是不是 SwiftUI 有什么 API 设置这个效果呢?
相似文章
与Apple‘更清晰’液态玻璃设置共度的一周透明生活
Apple iOS 27公测版引入了一个滑块,用于调整液态玻璃界面的透明度,让用户可以选择更透明或更不透明。作者测试了最透明的设置,并描述了视觉效果。
QuietGlass
QuietGlass 是一款免费、开源的Mac应用程序,通过AirPods或摄像头集成,在您移开视线或检测到另一张面孔时模糊屏幕,从而增强屏幕隐私。
苹果调低液态玻璃效果,Mac 看起来好多了
苹果 macOS 27 Golden Gate 开发者测试版引入了液态玻璃透明度滑块和设计改进,外观更少光泽,边栏优化,但性能提升尚不确定。
@10xmylife: 现在iOS小组件都不需要上传壁纸就能变透明了? 大家都在用那个私有API吗
讨论iOS小组件实现透明化是否不再需要上传壁纸,以及是否普遍使用了私有API。
@NatashaTheRobot:在苹果将所有WWDC开发者大会环节改为视频形式发布后,这是第一个感觉自然而不做作、充满人情味的视频,而且它非常出色!
本推文推荐了一个WWDC视频,因其自然的演示方式而备受称赞,并为开发者提供了关于如何使用SwiftUI和UIKit为iPhone Duo的新垂直布局调整工具栏的技术指导。