As my experience, and hopefully skill, in iPhone development has matured over the past year and half I am in the constant search for the best techniques for my apps to run better, faster, and consequently more efficient. Of the top developers that I follow they all make references to the importance of utilizing subclasses of UIViews and the underlying subsets of views in general.
I love the UI elements that are used on the phone. I didn't realize the awesome power of CoreAnimation and the flexibility that it gives you to manipulate and create graphics as such a granular level. I set out to see if I could recreate a common iPhone UI element completely programmatically: a glossy gradient button that still responds to touch events.
The end result was a success and a great learning experience. I still need to add in more testing to make sure that interacting with all these views is more efficient than interacting with standard pngs.
This biggest issue that I ran into was "re-enable" the button actions.
Simply subclassing UIButton did create a problem when dealing with the UIControlEventTouchUpInside/UIControlEventTouchUpOutside methods that you associate with buttons.
I was able to overcome this issue by implementing the touchesBegan and touchesEnded methods. Remember...UIButton inherits from UIControl, which in-turn inherits from UIView.