在保持背景动态的同时向视图添加动画模糊
问题描述:
我试图实现自定义模糊视图,其中模糊半径可以进行动画制作,并且模糊视图可以堆叠混合模式(CGBlendingMode或CIFilter),同时保留背景中发生的任何动画/动作。在保持背景动态的同时向视图添加动画模糊
我首先尝试了UIVisualEffectView,但是如果不访问private APIs,则半径不能动画,这很可能会导致应用程序拒绝。
拍摄快照并应用效果的问题是,该视图是静态的,并且模糊视图遮盖了背景中的任何移动。
我也看过FlexMonkey's Blurable,但我的结果与快照相似。
任何指导将非常有帮助。 干杯
编辑:我添加了一个gif来演示我试图做什么。从左到右移动的红色视图模糊并将其下面的内容放大,同时在后面的红色/蓝色方块上显示动画。
答
混合模式是非常棘手的,我不知道它是可以将它们应用到实时的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动画不支持工作。
我可能会建议尝试'UIViewEffectView',动画alpha。这与半径动画不一样,但产生一个体面的效果(假设你的意图是从非模糊转变为模糊)。 – Rob
我一开始尝试过,但减少阿尔法使背景看起来有雾而不是模糊。理想情况下,我想通过控制模糊半径和混合模式来重新创建UIVisualEffectView。 – elfanek