我正在尝试实现一个自定义模糊 View ,其中模糊半径可以设置动画,并且模糊 View 可以堆叠混合模式(CGBlendingMode 或 CIFilter),同时保留发生在背景。
我首先尝试了 UIVisualEffectView,但是如果不访问 private APIs 就无法对半径进行动画处理这很可能会导致应用被拒绝。
拍摄快照和应用效果的问题是 View 是静态的,背景中的任何移动都被模糊 View 掩盖了。
我也看了FlexMonkey's Blurable ,但我得到了与快照相似的结果。
任何指导都会很有帮助。 干杯
编辑:我添加了一个 gif 来演示我正在尝试制作的东西。从左到右移动的红色 View 模糊并放大了它下面的内容,同时显示了在它后面的红色/蓝色方 block 上发生的动画。
最佳答案
混合模式非常棘手,我不确定是否可以将它们应用到实时 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/