Question

I found this in the Quartz 2D Programming Guide:

To draw to the screen in an iOS application, you set up a UIView object and implement its drawRect: method to perform drawing. The view’s drawRect: method is called when the view is visible onscreen and its contents need updating. Before calling your custom drawRect: method, the view object automatically configures its drawing environment so that your code can start drawing immediately. As part of this configuration, the UIView object creates a graphics context (a CGContextRef opaque type) for the current drawing environment. You obtain this graphics context in your drawRect: method by calling the UIKit function UIGraphicsGetCurrentContext.

Since I am having problems with invalid Context (because it's 0x00 when I go back to re-draw), I was wondering if I could get the current context in the beginning of -drawRect and somehow pass it to the methods I call from within -drawRect?

Was it helpful?

Solution

You can definitely pass CGContextRef to methods called from drawRect: as long as these methods do not save the reference for use outside the duration of the drawRect: call, your code should be fine. However, the context reference that you pass around would be equivalent to the context retrieved through UIGraphicsGetCurrentContext, so I doubt that there is much to gain by adding an extra parameter.

OTHER TIPS

UIGraphicsGetCurrentContext can only be called from drawRect: method (or methods called from it) otherwise it will return nil.

You can use UIGraphicsGetCurrentContext from any method called from -drawRect. It's worth noting that you should not call -drawRect directly when you need to update your view; call -setNeedsDisplay instead.

If you want to use the UIKit drawing system with your own off-screen context, you can use UIGraphicsPushContext to set the current context.

In my experience, passing CGContextRef produces a memory leak that's pretty "fast."

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top