Xcode警告:"这将导致效果出现断裂,直到不透明度返回到1"

asl*_*nci 29 iphone ios8 uiblureffect uivisualeffectview

我有一个原型单元,我把UIVisualEffectView它放在里面ContentView.视觉效果视图的模糊风格很暗,而且Vibrancy关闭.然后我使用IB将视觉效果视图的alpha设置为0.5.

然后在运行时,我收到一条警告:

<UIVisualEffectView ...> is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1.
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么会出现此警告以及如何正确设置此alpha属性.

zvo*_*cek 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];
}];
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过设置包装器视图的alpha动画来设置效果,如其他答案中所建议的那样(甚至在iOS 8上工作).

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

[UIView animateWithDuration:0.3 animations:^{
    view.contentView.alpha = 1.0;
}];
Run Code Online (Sandbox Code Playgroud)

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


use*_*321 12

据我所知,你不能改变视觉效果视图的alpha.阿尔法总是必须是一个.

  • 视觉效果的alpha是可变的,但这个警告令人讨厌. (12认同)
  • 你当然可以.它可能不会产生预期的效果.但是,在许多情况下,它仍然会将此视为警告. (6认同)

Sah*_*oor 8

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

必须在上面的"查看效果视图"选项中选择" 活力"效果.

见图:

在此输入图像描述


Kem*_*nak 5

user1179321 definetely right.根据UIVisualEffectView文档;

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

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

  • 如果我们希望它更透明,我们应该如何正确地改变模糊视觉效果? (5认同)