【发布时间】:2013-09-20 23:15:03
【问题描述】:
我已经阅读了几十个关于在早期版本的 iOS 中模仿 iOS 7 模糊效果的问题。但这里出现的基本问题是 iOS 7 的 UIKit 真的有一个很好且方便的方法来使 any UIView 模糊吗?这对我来说似乎很合乎逻辑。任何帮助表示赞赏。
【问题讨论】:
标签: cocoa-touch uikit ios7
我已经阅读了几十个关于在早期版本的 iOS 中模仿 iOS 7 模糊效果的问题。但这里出现的基本问题是 iOS 7 的 UIKit 真的有一个很好且方便的方法来使 any UIView 模糊吗?这对我来说似乎很合乎逻辑。任何帮助表示赞赏。
【问题讨论】:
标签: cocoa-touch uikit ios7
Apple 提供了示例代码来模糊任何 iOS 7 风格的 UIImage。
Go to Apple Developer downloads 并在必要时登录。搜索“imageeffects”调出WWDC 2013 Sample Code条目,然后下载iOS_UIImageEffects示例代码。
在该项目中,UIImage+ImageEffects.h 中有一个 UIImage 类别,您可以将其复制到您自己的项目中,其中包含 applyBlurWithRadius:... 方法。
您需要将您的项目与 Accelerate 框架相关联。
这不会自动实时地对视图进行模糊处理 - 为此,请参阅 FXBlurView,它通过自动快照其父视图来执行类似的技术。不过,它可能会非常消耗性能:首先考虑是否可以通过静态模糊图像来实现您想要的效果,而不是尝试“实时”模糊移动内容。
【讨论】:
从 iOS 8.0(不是 iOS 7)开始,UIKit 提供了UIVisualEffectView 和UIBlurEffect。您可以观看WWDC 2014 Session 419 “Advanced Graphics and Animations for iOS Apps”(或只是download the slides)了解这些课程的介绍。
不,它没有。 Apple 并没有公开方便地执行此操作的接口。例如,如果您阅读了this discussion,Rincewind 的回复应该清楚地表明 Apple 没有为此提供公共 API,并且他们使用的私有 API 有严重的限制并且可能会发生变化。
您必须自己实现模糊效果。您可能希望使用新的-[UIView drawViewHierarchyInRect:afterScreenUpdates:] 方法来捕捉背景视图的外观,然后对其应用CIFilter 以执行模糊。
【讨论】:
UIKit 没有方便的方法来实现这个效果。但是,Github 上有一些库可以轻松实现此效果。 Nick Lockwood's 似乎是最受欢迎的。
【讨论】: