UIView:opaque vs. alpha vs. opacity

Bes*_*esi 56 iphone objective-c uiview ios

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

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

dea*_*rne 126

opaque意味着即使你是透明的,也不要在下面画任何东西.

背景颜色的alpha仅影响背景颜色的透明度,而不影响视图上绘制的任何其他颜色.

alpha 影响视图上绘制的所有内容.


opaque属性可以提高速度 - 如果您知道您的视图永远不会具有透明度,您可以将其设置为YES,当iOS呈现您的视图时,它可以进行一些性能优化并使其更快地呈现.如果设置为NOiOS,则必须将视图与下面的视图混合,即使它没有包含任何透明度.

alpha也会影响背景颜色的alpha,即如果背景颜色为0.5透明且alpha也为0.5,则会产生背景视图的alpha 0.25(0.5*0.5).

  • 我认为你的意思是背景颜色的alpha是0.25,而不是背景视图.我认为背景视图和背景颜色是两个不同的东西. (2认同)
  • 默认设置为YES.@property(nonatomic,getter = isOpaque)BOOL opaque; //默认为YES.... (2认同)

Mik*_*laj 10

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

Apple的文档:

您只需要为UIView的子类中的opaque属性设置一个值,该值使用drawRect:方法绘制自己的内容.opaque属性对系统提供的类(如UIButton,UILabel,UITableViewCell等)没有影响.

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

此属性为绘图系统提供了如何处理视图的提示.

以及来自同一Apple文档的更多指南:

如果视图不透明并且未填充其边界或包含完全或部分透明的内容,则结果是不可预测的.如果视图完全透明或部分透明,则应始终将此属性的值设置为NO.