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。