Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CALayer renderInContext: Position of Drawing

I have a UIView with a custom shape drawn in drawRect:. The frame property is set to:

{5.f, 6.f, 50.f, 50.f}

Now, I render the view in an Image Context, but it is ignoring the frame property of the UIView, and always drawing the UIView in the top left.

[_shapeView.layer renderInContext:UIGraphicsGetCurrentContext()];

I tried to change the frame of the CALayer, but nothing changed. Modifying the bounds property made things worse. The only work around I found useful was:

CGRect frame = _shapeView.frame;
CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
[_shapeView.layer renderInContext:context];

But, this is impractical when I am dealing with many shapes, I want to just use the frame property.

like image 984
Mazyod Avatar asked Sep 06 '12 06:09

Mazyod


1 Answers

Using CGContextTranslateCTM is the proper way to go. As renderInContext: documentation states : "Renders in the coordinate space of the layer." This means the frame origin of your layer/view is ignored.

Regarding CGContextDrawLayer, it is not made to be used with CALayer, but with CGLayer. These are two very different things, and explains your crash.

like image 55
amadour Avatar answered Sep 28 '22 11:09

amadour