29

我有一个原型单元格,我在其中放置了UIVisualEffectView一个ContentView. 视觉效果视图的模糊样式为深色且活力关闭。然后我使用 IB 将 Visual Effect View 的 alpha 设置为 0,5。

然后在运行时,我收到一条警告,上面写着:

<UIVisualEffectView ...> is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1.

我不明白为什么会出现此警告以及如何正确设置此 alpha 属性。

4

7 回答 7

14

问题是你想要动画什么。如果是效果,则无法通过该alpha属性对其进行动画处理。但是,从 iOS 9 开始,您可以通过在动画块中设置效果来对其进行动画处理。

UIVisualEffectView* view = [[UIVisualEffectView alloc] initWithFrame:self.view.bounds];
view.effect = nil;
[UIView animateWithDuration:0.3 animations:^{
    view.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
}];

或者,您可以通过动画包装视图的 alpha 来动画效果,如其他答案中所建议的(即使在 iOS 8 上也可以使用)。

如果要为视觉效果视图(子视图)的内容设置动画,请contentView改为为属性设置动画(您应该使用它来添加效果视图的子视图)。

[UIView animateWithDuration:0.3 animations:^{
    view.contentView.alpha = 1.0;
}];

所以总而言之,你永远不应该改变 UIVisualEffectView 本身的 alpha,因为它很可能不是你想要的。

于 2015-12-15T13:55:24.510 回答
12

据我所知,您无法更改视觉效果视图的 alpha。阿尔法总是必须是一。

于 2014-10-15T12:02:27.193 回答
8

可以通过设置背景颜色的 alpha而不是 Visual Effect View 来实现所需的效果。子视图应该添加到视觉效果视图的视图中,它们不受背景模糊的影响。

必须在上面的 View Effect View 选项中选择Vibrancy效果。

见图片:

在此处输入图像描述

于 2014-11-25T10:24:23.567 回答
5

user1179321 绝对正确。根据 UIVisualEffectView 文档;

使用 UIVisualEffectView 类时,避免小于 1 的 alpha 值。创建部分透明的视图会导致系统在屏幕外渲染过程中合并视图和所有关联的子视图。UIVisualEffectView 对象需要作为内容的一部分进行组合,以使其看起来正确。在视觉效果视图或其任何超级视图上将 alpha 设置为小于 1 会导致许多效果看起来不正确或根本不显示。

https://developer.apple.com/library/ios/documentation/uikit/reference/UIVisualEffectView/index.html

于 2014-10-24T13:12:13.997 回答
1

我的解决方案:

  1. 复制视觉效果视图后面的图层。(在我的情况下是 UIImageView)
  2. 对复制视图的 alpha 值进行动画处理。(例如 alpha 形式 1 到 0,显示模糊图像)
于 2015-07-27T19:38:05.387 回答
0

如果您以模态方式呈现视图控制器,请尝试在 segue 中禁用动画复选框。

于 2017-01-30T11:50:05.230 回答
0

你永远不知道延迟是否足够长;所以一个更清洁的解决方案是在下一个运行循环中进行演示。

 dispatch_async(dispatch_get_main_queue(), ^(void){
    [self presentViewController:yourPopoverr animated: YES completion: nil];
  });
于 2017-05-24T05:15:45.763 回答