Ios – UIView performance: opaque, backgroundColor, clearsContextBeforeDrawing

iosiphoneperformanceuikituiview

I'm displaying opaque PNGs with UIImageViews inside of a superview with a white background color. What's best for performance?

UIImageView Defaults

opaque = NO, backgroundColor = nil, clearsContextBeforeDrawing = YES.

iOS Developer Library: UIView Class Reference

  1. UIView Class Reference: backgroundColor says, "[nil] results in a transparent background color." If I set a UIViews opaque property to YES, must I also set its backgroundColor to [UIColor clearColor], or is that extra line of code & processing unnecessary? I.e., is [UIColor clearColor] considered opaque (not transparent)?

  2. Does the value of clearsContextBeforeDrawing matter for opaque views?

    The comments for clearsContextBeforeDrawing in UIView.h say it's ignored for opaque views.

    But, UIView Class Reference: clearsContextBeforeDrawing says:

    If the view’s opaque property is also set to YES, the backgroundColor property of
    the view must not be nil or drawing errors may occur.

    Which is it?

Similar Questions

Best Answer

Assuming that your PNGs always fills the entire UIImageView, you should get the best performance using:

opaque = YES, clearsContextBeforeDrawing = NO. In this mode backgroundColor is irrelevant. The pixels are simply replaced with the new image data.

For transparent PNGs on a single-color background, the fastest will be:

opaque = YES, clearsContextBeforeDrawing = YES, and backgroundColor matching whatever you need. In this case [UIColor whiteColor].