UIView:不透明与alpha与不透明

UIView的opaque alpha和背景不透明度是如何协同工作的?它们之间有什么区别?

UIView http://i.minus.com/jb2IP8TXbYTxKr.png

opaque手段,即使你是透明的,也不要在下面画任何东西

背景颜色的alpha只会影响背景颜色的透明度,而不会影响视图上的任何东西。

alpha会影响在视图上绘制的所有内容。


不透明的属性可以提高你的速度 – 如果你知道你的视图永远不会有透明度,你可以将它设置为YES ,当iOS呈现你的视图时,它可以进行一些性能优化并使其更快。 如果这被设置为NO iOS将不得不将视图与下面的视图混合,即使它不包含任何透明度。

alpha也会影响背景颜色的alpha,例如,如果背景颜色是0.5透明,alpha也是0.5,则会使背景视图的alpha值为0.25(0.5 * 0.5)。

对于deanWombourne的非常好的回答 ,值得补充的是,除非您不使用drawRect:方法绘制自己的内容,否则opaque属性不起作用。

苹果的文档 :

您只需要为UIView的子类中的opaque属性设置一个值,使用drawRect:方法来绘制自己的内容 。 不透明属性在系统提供的类 (如UIButton,UILabel,UITableViewCell等)中不起作用

如果你绘制自己的内容,请记住,不透明只是一个提示

这个属性为绘图系统提供了一个提示,告诉它如何处理视图。

以及来自同一个苹果文档的更多指导方针:

如果视图是不透明的,或者没有填充界限或者包含完全或部分透明的内容,则结果是不可预测的。 如果视图完全或部分透明,您应该始终将此属性的值设置为NO。