3

iOS 8 引入了一些非常时髦的交互式模糊。最值得注意的是,当您拉下聚光灯时会出现交互式模糊,但打开和关闭 Siri 时也会出现动画(尽管这不是交互式的)。我只在另一个地方注意到了这种交互式模糊:拉下个人资料视图时的官方 Twitter 应用程序(视差标题图像有时会缩放和模糊)。

我试图用 CoreImage 和 GPUImage 的 UISlider 为基本的东西制作动画(基于这个问题的答案以及 Apple 的UIImage+ImageEffects,但似乎没有任何性能足以以交互方式动画模糊(即将图像模糊为单个value 可以快速工作一次,但帧速率不够快,无法连续模糊)。

我如何以一种足够高性能的方式实现这些方法,以交互地模糊和取消模糊 UIImage(理想情况下是 UIView 或 CIContext 快照)?

4

1 回答 1

0

没有简单且单一的方法,但如果您遵循以下步骤和可选方法,它绝对是可行的:

  1. 最重要的是:对图像进行下采样。基本分辨率对于高斯模糊不是很重要。如果您仅将采样率降低到一半分辨率,则数据量将下降到四分之一!

  2. 定义最终目标模糊半径。

  3. 借助 C 函数检索设备的架构,并根据处理能力为不同的架构使用不同的 delta 饱和参数值。

  4. 尝试使用 Apple 提供的库创建模糊,该库具有关于与之交互的参数的步长值的半径步长(contentOffset例如,KVO 到属性)。dispatch_async 并且不要忘记将模糊图像回调到主队列!

  5. 上面的方法几乎肯定会满足从 arm7s 开始的所有架构,但你可能仍然对 arm7 - iPhone 4s 有一些问题)。

  6. 如果您仍然有问题,例如提到的 arm7,则将contentOffset下一次模糊所需的更改加倍以使用下一个半径。然后,不要更改 UIImageView 上的图像属性,而是使用新的模糊 UIImage 创建新的 UIImageView,并在创建下一个模糊页面的期间内将 alpha 通道从 0 淡入到 1。

  7. 您可能会使用许多技巧,例如为完整的交互式比例一个接一个地创建所有模糊图像,并将它们缓存在集合中,并在第 6 点中描述的方法中使用它们。

如果动画不是交互式的,而是在特定帧中计时,还有许多其他技术。

于 2015-03-26T21:28:36.007 回答