UIView不透明的属性

时间:2012-05-04 07:01:17

标签: iphone objective-c ipad uiview

默认情况下,UIView的opaque属性始终设置为“YES”。但是UIView类引用说明了这一点:

  

预计不透明视图将使用完全不透明的内容填充其边界 - 也就是说,内容的alpha值应为1.0。如果视图不透明并且未填充其边界或包含完全或部分透明的内容,则结果是不可预测的。

由于更改视图的alpha非常常见,尤其是在转换或动画期间,以上语句意味着您必须始终手动将opaque设置为NO也将更改alpha属性。

但我从未手动调整opaque并且没有任何明显的症状。有必要考虑这个因素吗?

2 个答案:

答案 0 :(得分:13)

答案是iOS非常智能,可以识别出,如果您的视图alpha小于1,则需要在视图后面绘制内容,无论您的视图是opaque属性。

回应评论:从我有限的实验中,我不认为视图的opaque属性有任何影响。 (我认为文档是错误的。)视图的图层的opaque属性确实有效:它控制传递给CGContext的{​​{1}}是否有alpha通道。如果图层的drawRect:属性为YES,则上下文没有alpha通道(并且被视为每个像素的alpha都为1.0)。

更改视图的opaque属性对图层的opaque属性没有影响。这与(例如)视图的opaque属性不同,后者只是图层alpha属性的包装。

理论上,已经记录了opacity属性允许他们优化绘图,Apple可以在将来实现该优化。在实践中,这样做可能会破坏很多应用程序,因此他们可能不会对与旧SDK相关联的应用程序进行此类更改。 (他们有能力使UIKit的行为有所不同,具体取决于应用程序与哪个版本相关联。)

答案 1 :(得分:1)

只要视图内容本身(不是其子视图)没有alpha就可以了。因此,如果使用包含alpha的PNG图像初始化UIImageViews,opaque将自动设置为NO

通常你不需要很多非不透明的视图。但无论如何,整个视图的alpha都是不同的。