为啥不透明视图在 iPhone 上更有效?
Posted
技术标签:
【中文标题】为啥不透明视图在 iPhone 上更有效?【英文标题】:Why opaque views are more effective on iPhone?为什么不透明视图在 iPhone 上更有效? 【发布时间】:2011-02-09 09:54:24 【问题描述】:我试图找出不透明视图比透明视图更好的其他原因。但是,我想出的唯一合理的原因是不透明视图背后的视图不需要在该位置绘制其内容。
这是一个错误的假设吗?还有其他充分的理由吗?
谢谢。
【问题讨论】:
【参考方案1】:这是正确的假设。直接来自 Apple 文档:
opaque
一个布尔值,确定 接收者是否不透明。
@property(nonatomic, getter=isOpaque) BOOL opaque
讨论
此属性为绘图系统提供提示 至于它应该如何对待这个观点。如果 设置为
YES
,绘图系统处理 视图完全不透明,这允许 绘图系统优化了一些 绘图操作和改进 表现。如果设置为NO
,则绘图 系统正常合成视图 与其他内容。默认值 这个属性是YES
。一个不透明的视图应该填充它的 完全不透明的边界 内容——也就是说,内容应该 alpha 值为
1.0
。如果 视图是不透明的,要么不 填满它的界限或完全包含或 部分透明的内容, 结果是不可预测的。你应该 始终设置此属性的值 到NO
如果视图是完整的或 部分透明。
【讨论】:
虽然文档告诉您将 opaque 属性设置为 YES 可能会提高性能,但它并没有准确地告诉您这是真的技术原因。事实上,iPhone 的图形处理器在合成操作方面并不是非常出色,因为它本身不能处理图像中的 alpha 分量。这就是为什么在将 PNG 放入设备之前进行“优化”的原因。 alpha 分量与其他分量预乘,以便图形处理器可以正确处理它。更多的合成意味着处理器的工作量更大,因此性能更差。【参考方案2】:除了能够避免绘制背景视图之外,还有其他一些与合成相关的更快的原因:
1) 无需混合前景和背景视图,这样可以节省对每个像素进行的一些数学运算
2) 如果视图移动,它的像素可以简单地被传送到它们的新位置,而无需任何重绘。这对于滚动性能来说是一个巨大的交易,即使在台式计算机上也是如此,更不用说移动设备了。
【讨论】:
以上是关于为啥不透明视图在 iPhone 上更有效?的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone 11 上,使用自定义视图,为啥我的 Tap Recognizer 或 UIButton 在视图的顶部没有响应但在视图的下部有效
Cocoa/iPhone:BackgroundColor 和 Opaque 属性