UIImage和UIView的互动模糊,如iOS 8聚光灯

时间:2014-11-16 06:50:46

标签: ios objective-c uiblureffect

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

我尝试使用带有CoreImage和GPUImage的UISlider动画基本动画(基于this question的答案以及Apple的UIImage+ImageEffects,但似乎没有足够的表现足以让交互式动画模糊(即将图像模糊为单个值可以快速运行一次,但不能以足够快的帧速度连续模糊)。

如何以足够高效的方式实现这些方法,以便以交互方式模糊和解开UIImage(理想情况下是UIView或CIContext快照)?

1 个答案:

答案 0 :(得分:0)

没有简单的方法可以做到这一点,但如果您按照以下步骤和可选方式明确可行:

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

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

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

  4. 使用Apple提供的库创建模糊的实验,其中半径步长与例如(KVO到contentOffset属性相互作用的参数的步长值有关)。 dispatch_async并且不要忘记使用模糊图像回调到主队列!

  5. 上面的方法几乎可以肯定地满足arm7s以后的所有架构,但是你可能仍然会遇到arm7-iPhone 4s的一些问题。

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

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

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