UIVisualEffectView如何在iOS中拖动时修改模糊度?

目前,我正在使用UIVisualEffectView将模糊应用于图像。

我有一个UIScrollView。 当我拉下scrollView,在我的“scrollViewDidScroll”方法中,我正在改变UIVisualEffectView的alpha。 当前的行为是,当我在视图中拖动时,模糊半径平滑地变化。

问题当然是,我不应该这样做。 获取有关更改UIVisualEffectView的Alpha值的警告。

我已经看到人们说使用animation模糊的平滑过渡,如下所示: 如何淡入淡出UIVisualEffectView和/或UIBlurEffect进出?

但是,我还没有看到任何让我在做这个事情的时候,比如说一个泛式手势或者其他东西。 我的意思是,如果我用定时的数量来制作animation,一切都很好。 但是在拖动过程中这样做?

有一种方法 :)

正如你已经注意到的,你可以从nil效果animation到像UIBlurEffectStyleDark效果,所以如果我们添加一个animation,然后暂停图层的animation,我们可以通过调整图层的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之间的模糊(animation持续时间):

 - (void) adjustBlur:(CGFloat)blurIntensity { self.blurredEffectView.layer.timeOffset = blurIntensity; } 
  • 注意:这不适用于不支持UIBlurEffectanimation的iOS 8。