在保持背景动态的同时向视图添加动画模糊

问题描述:

我试图实现自定义模糊视图,其中模糊半径可以进行动画制作,并且模糊视图可以堆叠混合模式(CGBlendingModeCIFilter),同时保留背景中发生的任何动画/动作。在保持背景动态的同时向视图添加动画模糊

我首先尝试了UIVisualEffectView,但是如果不访问private APIs,则半径不能动画,这很可能会导致应用程序拒绝。

拍摄快照并应用效果的问题是,该视图是静态的,并且模糊视图遮盖了背景中的任何移动。

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

任何指导将非常有帮助。 干杯

编辑:我添加了一个gif来演示我试图做什么。从左到右移动的红色视图模糊并将其下面的内容放大,同时在后面的红色/蓝色方块上显示动画。

enter image description here

+1

我可能会建议尝试'UIViewEffectView',动画alpha。这与半径动画不一样,但产生一个体面的效果(假设你的意图是从非模糊转变为模糊)。 – Rob

+0

我一开始尝试过,但减少阿尔法使背景看起来有雾而不是模糊。理想情况下,我想通过控制模糊半径和混合模式来重新创建UIVisualEffectView。 – elfanek

混合模式是非常棘手的,我不知道它是可以将它们应用到实时的UIView(GPUImage这里可能帮助),但动画模糊半径(0和UIViewEffectView的全模糊之间)可以通过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; 
} 

注:这不会在iOS 8,其中UIBlurEffect动画不支持工作。