在iOS中拖动时如何修改UIVisualEffectView的模糊度?
Posted
技术标签:
【中文标题】在iOS中拖动时如何修改UIVisualEffectView的模糊度?【英文标题】:How can blurriness of UIVisualEffectView be modified while dragging in iOS? 【发布时间】:2016-08-31 19:38:06 【问题描述】:目前,我正在使用 UIVisualEffectView 对图像应用模糊。
我有一个 UIScrollView。当我下拉滚动视图时,在我的“scrollViewDidScroll”方法中,我正在更改 UIVisualEffectView 的 alpha。当前的行为是,当我在视图中拖动时,模糊半径会平滑变化。
当然,问题是我不应该这样做。收到有关更改 UIVisualEffectView 的 alpha 值的警告。
我看到有人说要使用动画来平滑过渡,就像这里这样:How to fade a UIVisualEffectView and/or UIBlurEffect in and out?
但是,我没有看到任何可以让我在此期间执行此操作的东西,比如泛手势或其他东西。我的意思是,如果我设置一个带有定时数量的动画,一切都很好。但是在拖拽期间这样做呢?
【问题讨论】:
【参考方案1】:有办法:)
正如您所注意到的,您可以从 nil
效果动画到类似 UIBlurEffectStyleDark
的效果,因此如果我们添加动画然后暂停图层的动画,我们可以通过调整图层的 @ 来控制效果的进度987654323@!
- (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;
注意:这不适用于不支持 UIBlurEffect 动画的 ios 8。
【讨论】:
谢谢。这正是我想要的! :D 附加说明:有时在将UIVisualEffectView
子视图添加到视图层次结构之前,动画似乎无法工作。我通常在viewDidLoad
中实例化并添加模糊,稍后在viewDidAppear:
中添加动画。
我在 Swift 中使用相同的方法。但是,有一个错误 - 当应用程序移动到后台,然后返回时,动画会自动达到其结束状态并且不再动画。你们有没有解决这个问题?你知道如何解决这个问题吗?
@suntime 您可能需要防止动画被删除?
@Warpling 我实现了一个解决方法,到目前为止它似乎正在工作。为了简单起见:当应用程序进入后台时,我保存了 UITableView 的 contentOffset.y,当它回到前台时,我重新启动动画并将 UITableView 的 contentOffset 设置为保存的位置。这一切都发生得非常顺利。我知道这不是最好的解决方案,但我还没有找到更好的解决方案,几天来一直在寻找解决方案。以上是关于在iOS中拖动时如何修改UIVisualEffectView的模糊度?的主要内容,如果未能解决你的问题,请参考以下文章
拖动和释放通知时,在 iOS 中调用 ApplicationBecomeActive
如何在 iOS 11 中禁用 UITextView 中的拖动