默认情况下,UIView的opaque
属性始终设置为“YES”。但是UIView类引用说明了这一点:
预计不透明视图将使用完全不透明的内容填充其边界 - 也就是说,内容的alpha值应为1.0。如果视图不透明并且未填充其边界或包含完全或部分透明的内容,则结果是不可预测的。
由于更改视图的alpha
非常常见,尤其是在转换或动画期间,以上语句意味着您必须始终手动将opaque
设置为NO
也将更改alpha
属性。
但我从未手动调整opaque
并且没有任何明显的症状。有必要考虑这个因素吗?
答案 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都是不同的。