UIView alpha与UIColor alpha

Yun*_*hel 16 transparency alpha objective-c uiview ios

我想知道之间的区别:

  • 为我的UIView分配一个<1 alpha vs的颜色
  • 为它指定一个不透明的颜色,但给UIView一个<1 alpha值.

在屏幕截图中,我制作了两个UIViews,每个UIVabs上有两个黑色(alpha = 1.0)UILabel:

两个UIView在UIView和bg上具有相同的颜色但是0.5 alpha. 颜色和第三个与alpha 1

假设之前定义了一个宏_RGB:

#define _RGB(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
Run Code Online (Sandbox Code Playgroud)

然后这里是代码::

[_view1 setBackgroundColor:_RGB(255, 0, 0, 1)];
[_view1 setAlpha:0.5];

[_view2 setBackgroundColor:_RGB(255, 0, 0, 0.5)];
[_view2 setAlpha:1];

[_view3 setBackgroundColor:_RGB(255, 0, 0, 1)];
[_view3 setAlpha:1];
Run Code Online (Sandbox Code Playgroud)

我只能在视觉上看到一个区别:更改视图自己的alpha而不是bg颜色,也会影响子视图.但除此之外,我应该考虑的功能有什么不同吗?(例如,关于动画,图层等)

Luk*_*cka 22

不同之处是:

  • 通过设置背景颜色,alpha <1,只有背景颜色会有alpha,所有子视图默认都有alpha 1,即100%不透明
  • 通过设置视图的alpha,将使用给定的alpha绘制整个视图(包括所有子视图)

所以在你的例子中:

  • _view1 (视图上的alpha <1):alpha也应用于子视图UILabel
  • _view2 (背景颜色上的alpha <1):subview UILabel非常不透明
  • _view3 (两者都是defualt alpha 1):好吧,我们都看到:-)背景颜色和标签都是不透明的

两者的示例用法:

在背景clor的阿尔法 阿尔法在整个视图

左图:您有一个半透明的黑色叠加层,其子视图UIImageView包含白色复选标记图标,您通常希望图标完全不透明(不透明).因此,您只需将背景颜色设置为黑色,其中alpha <1(示例中为0.75f).

反对:

右图:您有一个半透明的黑色叠加层,其子视图UIImageView包含白色图案图像(图案是不透明的白色,没有阿尔法).并且您希望叠加中的图案也是半透明的.然后,您将背景颜色设置为黑色,其中alpha 1(不透明)和alpha <1到整个视图.

如您所见,左侧图像上的图标完全不透明,但在右侧,您还可以看到星星图案.