设置 self.view.opaque = NO 和将背景颜色设置为 clearColor 之间的区别?

Posted

技术标签:

【中文标题】设置 self.view.opaque = NO 和将背景颜色设置为 clearColor 之间的区别?【英文标题】:Difference between setting self.view.opaque = NO and setting the background color to clearColor? 【发布时间】:2016-11-23 16:32:06 【问题描述】:

只是想知道将(背景)视图的opaque 属性设置为NO 与简单地将视图的背景颜色设置为“clearColor”有什么区别。如果我做后者,是否不需要将opaque 属性也设置为NO(如self.view.opaque = 0)?

【问题讨论】:

试试看。将opaque 设置为NO 并将backgroundColor 设置为清除。注意结果。然后尝试将opaque 设置为YES 并将backgroundColor 设置为clear。 【参考方案1】:

世界上的所有差异。他们彼此没有任何关系。两者都不会对另一个产生任何影响。

opaque,如果是YES,会向绘图系统发送一条消息,说明它是否可以通过不必将此视图与其背后的内容合成来节省一些周期。

backgroundColor 是,呃,背景的颜色。如果背景颜色不透明且视图的alpha 为1,则您的有责任将opaque 设置为YES。它不会自行发生。

重要提示:我希望您不要将opaque 与图层的opacity 或视图的alpha 混淆。那是另一回事。

【讨论】:

但是将 backgroundColor 设置为 clearColor 意味着您不需要明确地说 self.view.opaque = 0,所以它是一个干净的替代方案,对吧? @hinterbu 设置backgroundColoropaque 彼此无关。 @hinterbu 你说你理解它们不相关,但你一直在问一个如何影响另一个。他们没有。 好的,我认为我不太明白的是 opaque 属性不会使内容更加透明/不透明,即使视图设置为不透明,它仍然可以是透明的。这是正确的吗? 只是回来说谢谢你的帮助 - 我想了想,如果我认为不透明的意思是“固体”而不是字面上的不透明,我明白它如何仍然可以保持透明度,因为它可以同时是不透明的,或实心的,透明的,并且不能在下面绘制任何东西。【参考方案2】:

UIView.opaque documentation 提供了很多关于此的详细信息并讨论了它的工作原理。

opaque 属性与将backgroundColor 设置为清除不同。

也不等同于设置视图的alpha值。

它唯一影响的是操作系统如何在drawRect 方法中绘制视图。允许它为设置为YES 的视图跳过渲染通道。

这一切都在文档中。

注意始终阅读文档。

【讨论】:

我已经查看了文档并将再次查看它,但我不明白您的意思是“允许它跳过渲染通道以将视图设置为 YES”。 @hinterbu 渲染透明视图非常昂贵。如果不需要这样做,则会浪费 cpu 周期。通过将视图标记为不透明,您可以让设备知道它不需要浪费多个周期来渲染您的视图,因为没有透明度。设置 opaque 不会改变您的视图的外观。如果你不确定。不要碰它。根据您的需要使用 alpha 或 backgroundColor。 太好了,谢谢。请看我上面的评论。这是你对那个重要句子的措辞,我无法理解 - 与它背后的解释无关。

以上是关于设置 self.view.opaque = NO 和将背景颜色设置为 clearColor 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Core Graphics 栅格数据未从内存中释放

如何使用iOS上的代码截取屏幕截图?

重新加载表格后 UITableView 编辑设置为 NO

ios导航栏半透明设置为NO改变底部UICollectionView的高度

如何修复“将请求的模式设置为'no-cors'”错误?

在将模式设置为“no-cors”时使用 fetch 访问 API 时出错 [重复]