【问题标题】:How to minimize visual flickering with iOS8 "UIVisualEffectView with Blur"如何使用 iOS8“UIVisualEffectView with Blur”最小化视觉闪烁
【发布时间】:2015-06-26 18:56:42
【问题描述】:

我有一个特殊的应用程序,由于导航结构的原因,我无法使用具有半透明效果的普通 UINavigationBars,因此我选择尝试使用 iOS8 的 UIVisualEffectView 和 Blur。

这个解决方案大部分都有效,但是当这个模糊视图下方的 UITableView 滚动时会出现非常明显的闪烁效果。当图像或彩色矩形的边缘通过模糊视图下方时,会发生大量闪烁。

有人经历过吗?有谁知道如何解决这个问题?

我的实现很简单,我将 UIVisualEffectView 拖到我的视图控制器上,并将其限制在上、左和右屏幕边界,并添加了 64 的高度限制。下面只是一个带有一些图像和文本的 UITableView。

【问题讨论】:

  • 模糊是计算密集型的。它可能不适合这种事情。闪烁可能是由于执行计算时的延迟造成的。
  • 感谢您的输入,Matt -- 所以您认为 UIVisualEffectView 只是用于静态(无运动)模糊?
  • 我会说没有很多的动作。
  • 嗯...您知道任何替代方案吗?希望避免实现另一个 3rd 方库。
  • 你是怎么做到的?

标签: ios uivisualeffectview


【解决方案1】:

“我假设在计算模糊时没有考虑不在视图下的内容。它很可能是外推的(通过镜像、复制、包装等来填充图像……就像你会做的那样,以最大限度地减少边界效应在任何卷积上)。但这在许多情况下会产生不希望的视觉跳跃。

如果您想最小化这个工件,只需将 UIVisualEffectView 比你的视图大。几个像素就足够了, 无论如何,模糊内核并没有那么大。并使您的视图剪辑 到界限。”

参考:https://medium.com/@imho_ios/avoid-artifacts-on-uiblureffect-edges-c30e737c21fb

这对我有用,至少消除了导航栏中的底部闪烁。但是,它在顶部不起作用。我相信这是由于视图(可能是 UIWindow?)对 - 在我的情况下 - tableView 进行剪辑。

更新: iOS 9.0 及更高版本似乎修复了该错误。

【讨论】:

  • 看起来这是在 iOS 8 上解决问题的唯一方法。至少要最小化它。
  • 有没有人试过垫多少?或者知道内核有多大?
【解决方案2】:

我制作了一个 alpha 为 0 的 uiview 并添加了 blurview 作为其子视图。所以我可以最小化闪烁问题,也可以用动画隐藏/显示或圆角它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多