I'm displaying opaque PNGs with UIImageViews inside of a superview with a white background color. What's best for performance?
UIImageView Defaultsopaque = NO, backgroundColor = nil, clearsContextBeforeDrawing = YES.
UIView Class ReferenceUIView 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)?
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
opaqueproperty is also set toYES, thebackgroundColorproperty of the view must not benilor drawing errors may occur.
Which is it?
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].
If you set UIView's opaque property to YES, you must ensure your drawing completely fills the view with no transparency. So, you need to set a white background colour (a clear one won't work, because that's not opaque).
I don't think you want to change the defaults for your image view, but you should ensure that your PNGs do not have any transparency (that is, have no alpha channel; you can check this in Preview's image inspector; ensure it doesn't say 'Has Alpha'.). I believe UIImageView will do the right thing if you give it an opaque image.
Depending on what's in the background, you might get better performance with opaque = YES and a white background for your image views, (to prevent redrawing parts of the parent view) but I wouldn't start that way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With