Search code examples
iphonecore-animationuiimagecalayercashapelayer

CAShaperLayer -renderInContext Doesn't Work?


I am able to create a UIImage from a Core Animation layer using the following code:

- (UIImage*)contentsImage;
{
   UIGraphicsBeginImageContext([self bounds].size);
   [self renderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return image;
}

This code is in my CALayer derived class. The issue I am running into is that I have two CAShapeLayers that are child layers of my layer that do not get rendered to the resulting image. If I add standard CALayers as children they get rendered fine. The Apple docs say:

Renders the receiver and its sublayers into the specified context.

It also says that it's been available since iPhone OS 2.0. Wondering if there is something I'm missing or if I should file a radar.

Any ideas what might keep the child CAShapeLayers from getting drawn to the image?

Thanks.


Solution

  • The CALayer machinery calls renderInContext to create its bitmapped contents property. But in a CAShapeLayer, the path property is not actually rendered to its contents as seen by this note in the header:

    The shape as a whole is composited between the layer's contents and its first sublayer.

    It stands to reason that renderInContext won't actually render the CAShapeLayer path onto your context. I haven't actually tried this out for myself however.