如何制作类似iOS 7模糊视图的效果?

219

我正在尝试复制苹果公开发布的iOS 7示例屏幕中的模糊背景:

iOS 7 Control Center screenshot

这个问题建议对下面的内容应用CI滤镜,但这是一种完全不同的方法。显然,iOS 7没有捕获下面视图的内容,原因有很多:

  1. 进行一些粗略的测试,捕获下面视图的屏幕截图并应用足够大的CIGaussianBlur滤镜来模拟iOS 7的模糊样式需要1-2秒,即使在模拟器上也是如此。
  2. iOS 7的模糊视图可以在动态视图(例如视频或动画)上进行模糊处理,而且没有明显的延迟。

有人能假设他们可能使用哪些框架来创建这种效果,并且是否可以使用当前公共API创建类似的效果吗?

编辑:(来自评论)我们不确切知道苹果是如何做到的,但是我们可以做出一些基本假设吗?我们可以假设他们正在使用硬件,是吗?

该效果是否包含在每个视图中,以使效果实际上不知道其背后的内容?或必须根据模糊处理的工作方式考虑模糊处理后面的内容?

如果效果后面的内容相关,我们可以假设Apple正在接收下方内容的“馈送”并不断使用模糊渲染它们吗?


我认为苹果公司正在使用纯GL来渲染主屏幕。我怀疑他们是否会使用UIView等抽象层来降低性能,因为这是操作系统的关键部分。 - Dave
正如我在这里的答案评论中所指出的:https://dev59.com/kWQn5IYBdhLWcg3wLkkd#17048668 他们编写了操作系统,因此当然可以加速访问当前视图下面组合层的内容。我们可以在私有IOSurface API中看到他们可能正在使用的一些内容:https://dev59.com/vWzXa4cB1Zd3GeqPXL8_ 。如果高斯模糊具有固定半径,甚至使用像积分图像这样的有趣优化,那么它们可以比广义高斯模糊情况快得多。 - Brad Larson
@BradLarson - 转述一下杰西卡·辛普森的话...我不知道所有这些意味着什么,但听起来很酷!但是说真的,你是在说可以使用部分透明的视图和模糊滤镜将其覆盖在另一个视图上以实现这种效果吗? - sangony
https://dev59.com/x2Qn5IYBdhLWcg3wLkgd#25706250 对我来说第一次尝试就完美地运行了,并且非常简洁。 - Ben Wheeler
12个回答

4
您可以尝试使用我的自定义视图,它具有模糊背景的功能。它通过模拟对背景进行快照并将其模糊来实现,就像Apple WWDC代码中的那个一样。它非常简单易用。
我还改进了一些内容,使得动态模糊效果不会影响性能。我的视图的背景是一个scrollView,与视图一起滚动,从而为其余的父视图提供模糊效果。
请在我的GitHub上查看示例和代码。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接