ios - 在保持背景动态的同时向 View 添加动画模糊

标签 ios uiview uikit core-graphics uivisualeffectview

我正在尝试实现一个自定义模糊 View ,其中模糊半径可以设置动画,并且模糊 View 可以堆叠混合模式(CGBlendingModeCIFilter),同时保留发生在背景。

我首先尝试了 UIVisualEffectView,但是如果不访问 private APIs 就无法对半径进行动画处理这很可能会导致应用被拒绝。

拍摄快照和应用效果的问题是 View 是静态的,背景中的任何移动都被模糊 View 掩盖了。

我也看了FlexMonkey's Blurable ,但我得到了与快照相似的结果。

任何指导都会很有帮助。 干杯

编辑:我添加了一个 gif 来演示我正在尝试制作的东西。从左到右移动的红色 View 模糊并放大了它下面的内容,同时显示了在它后面的红色/蓝色方 block 上发生的动画。

enter image description here

最佳答案

混合模式非常棘手,我不确定是否可以将它们应用到实时 UIView(GPUImage 可能 在这里有所帮助)但是动画模糊半径(在 0 和 UIVisualEffectView 的完全模糊之间) ) 可以通过 this method :

您可以从 nil 效果动画到 UIBlurEffectStyleDark 这样的效果,因此如果我们添加动画然后暂停图层的动画,我们可以通过以下方式控制效果的进度调整图层的timeOffset!

- (void) setupBlur {
    // Setup the blur to start with no effect
    self.blurredEffectView = [[UIVisualEffectView alloc] initWithEffect:nil];

    // Add animation to desired blur effect
    [UIView animateWithDuration:1.0 animations:^{
        [self.blurredEffectView setEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]];
    }];

    // Pause layer animations
    self.blurredEffectView.layer.speed = 0;
}

在 0.0 和 1.0 之间调整模糊(动画持续时间):

- (void) adjustBlur:(CGFloat)blurIntensity {
    self.blurredEffectView.layer.timeOffset = blurIntensity;
}

注意:这不适用于不支持 UIBlurEffect 动画的 iOS 8。

关于ios - 在保持背景动态的同时向 View 添加动画模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46383073/

相关文章:

ios - 您可以在不成为 Mac 管理员的情况下在 iOS 上创建和发布应用程序吗?

ios - 在 SwiftUI 中拖动分隔符

ios - 在 UITableView 中滚动到 UISearchBar 的顶部

ios - 确定 UILocalNotification 是否是从调度或用户交互中触发的

ios - 检查用户是否取消了 SKPaymentTransaction

ios - 为 HTTP Live Streaming 加密/解密部分文件

ios - iPhone 7 Plus 和 iPhone 6 版本的边界宽度不同

ios - 如何借助 AutoLayout 在自定义 UITableviewCell 中添加自定义 UIView(xib)?

ios - 添加一个 UIView 到另一个

ios - UITableView 页脚,停止在内容上 float