ios - UIView alpha 与 UIColor alpha

标签 ios objective-c uiview transparency alpha

我想知道它们之间的区别:

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

在屏幕截图上,我制作了两个 UIView,每个 UIView 的顶部都有两个黑色 (alpha = 1.0) UILabel:

Two UIView's with same color but 0.5 alpha on UIView and bg. color and a third one with alpha 1

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

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

然后这里是代码::

[_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];

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

最佳答案

区别在于:

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

所以在你的例子中:

  • _view1 (alpha <1 on view): alpha 也应用于 subview UILabel
  • _view2(alpha <1 on background color): subview UILabel 非常不透明
  • _view3(两者的默认 alpha 1):好吧,我们都看到了 :-) 背景颜色和标签都是不透明的

两者的用法示例:

Alpha on background clor Alpha on whole view

左图:你有一个半透明的黑色叠加层,它有一个 subview UIImageView 包含一个白色的复选标记图标,你通常希望该图标完全不透明(非-透明的)。因此,您仅将背景颜色设置为黑色,alpha <1(示例中为 0.75f)。

反对:

右图:您有一个半透明的黑色覆盖层,它有一个包含白色图案图像的 subview UIImageView(该图案是不透明的白色,没有 alpha)。并且您希望叠加层中的图案也是半透明的。然后,您可以将背景颜色设置为黑色,并为整个 View 设置 alpha 1(不透明)和 alpha <1。

如您所见,左图上的图标是完全不透明的,但在右图中,您还可以透过星星图案看到。

关于ios - UIView alpha 与 UIColor alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20423390/

相关文章:

ios - 使用 AutoLayout 时折叠 UIView

iphone - iOS:推送相同的 View Controller

ios - 折线不会出现在 MapKit 中

ios - 有没有办法将 UIView 放在 UIPopoverController 之上?

ios - 上一个单选按钮状态未清除 objective-c

objective-c - ios 当文本字段等于字符串时制作按钮更改 View

ios - 在 Swift 中使用 XIB 自定义 UIView 子类

ios - View 框架高度降低并出现黑条

ios - 如何在加载后返回 UIImage

objective-c - NSTextView 中的表情符号