16

我有一个UIView带有自定义形状的drawRect:. frame属性设置为:

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

现在,我在图像上下文中渲染视图,但它忽略了 的 frame 属性,并始终在左上角UIView绘制。UIView

[_shapeView.layer renderInContext:UIGraphicsGetCurrentContext()];

我试图改变 的frameCALayer但没有任何改变。修改bounds属性使事情变得更糟。我发现有用的唯一解决方法是:

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

但是,当我处理许多形状时,这是不切实际的,我只想使用 frame 属性。

4

1 回答 1

31

使用CGContextTranslateCTM是正确的方法。正如renderInContext: 文档所述:“在图层的坐标空间中渲染。” 这意味着您的图层/视图的框架原点被忽略。

关于CGContextDrawLayer,它不是与 一起使用的CALayer,而是与 一起使用的CGLayer。这是两个非常不同的事情,并解释了您的崩溃。

于 2012-09-07T14:33:05.657 回答