I'm displaying opaque PNGs with UIImageView
s 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
-
UIView Class Reference: backgroundColor says, "[
nil
] results in a transparent background color." If I set aUIView
sopaque
property toYES
, must I also set itsbackgroundColor
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
inUIView.h
say it's ignored for opaque views.But, UIView Class Reference: clearsContextBeforeDrawing says:
If the view’s
opaque
property is also set toYES
, thebackgroundColor
property of
the view must not benil
or drawing errors may occur.Which is it?
Best Answer
Assuming that your PNGs always fills the entire
UIImageView
, you should get the best performance using:opaque = YES
,clearsContextBeforeDrawing = NO
. In this modebackgroundColor
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
, andbackgroundColor
matching whatever you need. In this case[UIColor whiteColor]
.