我尝试实现自定义模糊视图,其中模糊半径可以设置动画,模糊视图可以叠加混合模式(CGBlendingMode或CIFilter),同时保留任何在后台发生的动画/动作。
我首先尝试了UIVisualEffectView,但是如果没有访问private APIs,则无法动画半径,这很可能导致应用拒绝。
拍摄快照并应用效果的问题是视图是静态的,背景中的任何移动都会被模糊视图覆盖。
我还看了FlexMonkey's Blurable,但我的结果与快照相似。
任何指导都会非常有用。 干杯
编辑:我添加了一个gif来演示我想要制作的内容。从左到右移动的红色视图模糊并将其下方的内容相乘,同时显示动画发生在其后面的红色/蓝色方块上。
答案 0 :(得分:1)
混合模式非常棘手,我不确定是否可以将它们应用到实时UIView(GPUImage 可能帮助),但动画模糊通过this method可以实现半径(介于0和UIVisualEffectView'完全模糊之间):
您可以将nil
效果设置为UIBlurEffectStyleDark
之类的效果,这样如果我们添加动画然后暂停图层的动画,我们就可以通过调整效果来控制效果的进度layer的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;
}
注意:这不会在iOS 8上工作,因为UIBlurEffect动画不受支持。