UIView性能:不透明,backgroundColor,clearsContextBeforeDrawing?

我用UIImageView在白色背景颜色的超级视图内显示不透明的PNG。 什么是最好的performance?

UIImageView默认值

opaque = NObackgroundColor = nilclearsContextBeforeDrawing = YES

iOS开发库: UIView类参考

  1. UIView类参考:backgroundColor说:“[ nil ]导致透明的背景色。” 如果我将UIViewopaque属性设置为YES ,还必须将其backgroundColor设置为[UIColor clearColor] ,还是不需要多余的代码和处理行? 也就是说, [UIColor clearColor]被认为是不透明的(不透明)?

  2. clearsContextBeforeDrawing的值是否对不透明视图clearsContextBeforeDrawing

    clearsContextBeforeDrawing中的UIView.h的注释表明它被opaque视图忽略。

    但是, UIView类参考:clearsContextBeforeDrawing说:

    如果视图的opaque属性也设置为YES ,则视图的backgroundColor属性不能nil否则可能会出现绘图错误。

    这是哪个?

类似的问题

  • UIView的不透明属性的值为YES,与其值为[UIColor clearColor]的backgroundColor属性冲突?
  • cocoa/ iPhone:BackgroundColor和不透明属性

假设您的PNG始终填充整个UIImageView ,您应该使用以下方式获得最佳性能:

opaque = YESclearsContextBeforeDrawing = NO 。 在这种模式下, backgroundColor是不相关的。 像素被简单地replace为新的图像数据。

对于单色背景上的透明PNG,最快的将是:

opaque = YESclearsContextBeforeDrawing = YES ,和backgroundColor匹配任何你需要的。 在这种情况下[UIColor whiteColor]

如果将UIView的不透明属性设置为YES,则必须确保您的绘图完全填充视图,而不透明。 所以,你需要设置一个白色的背景颜色(一个清晰的不会工作,因为这不是不透明的)。

我不认为你想改变你的图像视图的默认值,但你应该确保你的PNG没有任何透明度(也就是说,没有alpha通道;你可以在预览的图像检查器中检查;确保它没有“说'有阿尔法')。 我相信如果你给它一个不透明的图像,UIImageView会做正确的事情。

根据背景中的内容,opaque = YES和图像视图的白色背景(防止重新绘制父视图的某些部分)可能会获得更好的性能,但是我不会以这种方式开始。