You do not have to do all the view drawing in the same coordinate
system. Also repeatedly transforming the paths you are drawing
does not seem like the best approach. Better to save and restore
graphics state to draw the bits in different coordinate systems,
so your graphics model objects can be static. Your -drawRect
would look conceptually like this:
One thing about your method that's not immediately obvious to me is
why it's more efficient to apply all these transforms to the entire
coordinate system of a view than just rotate a bezier path within
the view. It seems like, at least intuitively, that transforming a
small part of a view (the hands) would be much more efficient.
The "entire" coordinate system is simply a drawing context with some
state information. One aspect of that context is the current
transform. The current transform only really does something when you
go to draw. It doesn't change what you may have drawn already, etc.