UIView opaque property
ipad, iphone, objective-c, uiview
Solution
The answer is that iOS is smart enough to recognize that if your view's `alpha` is less than 1, it needs to draw the content behind your view, regardless of your view's `opaque` property.
In response to comments: from my limited experimentation, I don't think the view's `opaque` property has any effect. (I think the documentation is wrong.) The view's layer's `opaque` property does have an effect: it controls whether the `CGContext` passed to `drawRect:` has an alpha channel. If the layer's `opaque` property is YES, the context has no alpha channel (and is treated as if every pixel has alpha of 1.0).
Changing the view's `opaque` property has no effect on the layer's `opaque` property. This is different than (for example) the view's `alpha` property, which is just a wrapper for the layer's `opacity` property.
In theory, having documented that the `opaque` property allows them to optimize drawing, Apple could implement that optimization in the future. In practice, doing so would probably break a lot of apps, so they probably won't make such a change apply to apps linked against older SDKs. (They have the ability to make UIKit behave differently depending on which version the app was linked with.)
Problem
The `opaque` property of a UIView is by default always set to "YES". But the UIView class reference states this: An opaque view is expected to fill its bounds with entirely opaque content—that is, the content should have an alpha value of 1.0. If the view is opaque and either does not fill its bounds or contains wholly or partially transparent content, the results are unpredictable. Since changing the `alpha` of a view is quite common, especially during transitions or animations, then the above statement would imply that you must always manually set `opaque` to `NO` if you are going to change the `alpha` property as well. But I have never manually adjusted `opaque` and haven't had any noticeable symptoms. How necessary is it to make this consideration?