UIView性能:opaque,backgroundColor,clearsContextBeforeDrawing?

时间:2011-11-05 03:13:07

标签: iphone ios performance uiview uikit

我在具有白色背景颜色的超视图中显示UIImageView s的不透明PNG。什么是最好的表现?

UIImageView默认

opaque = NObackgroundColor = nilclearsContextBeforeDrawing = YES

iOS Developer Library: UIView Class Reference

  1. UIView Class Reference: backgroundColor说,“[nil]会产生透明的背景色。”如果我将UIViews opaque property设置为YES,我还必须将其backgroundColor设置为[UIColor clearColor],或者是额外的代码行&加工不必要?即,[UIColor clearColor]被认为是不透明的(不透明)?

  2. clearsContextBeforeDrawing的值对于不透明视图是否重要?

    clearsContextBeforeDrawingUIView.h的评论表示,对于不透明视图,它会被忽略。

    但是,UIView Class Reference: clearsContextBeforeDrawing说:

      

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

    这是什么?

  3. 类似问题

2 个答案:

答案 0 :(得分:7)

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

opaque = YESclearsContextBeforeDrawing = NO。在此模式下,backgroundColor无关紧要。只需用新的图像数据替换像素。

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

opaque = YESclearsContextBeforeDrawing = YESbackgroundColor匹配您需要的任何内容。在这种情况下[UIColor whiteColor]

答案 1 :(得分:3)

如果将UIView的opaque属性设置为YES,则必须确保绘图完全填充视图而没有透明度。所以,你需要设置一个白色的背景颜色(一个明确的颜色不起作用,因为那不是不透明的)。

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

根据背景中的内容,使用opaque = YES和图像视图的白色背景可能会获得更好的性能(为了防止重绘父视图的部分),但我不会那样开始。