CALayer renderInContext: 绘制的位置

16

我有一个自定义形状绘制在drawRect:中的UIViewframe属性设置为:

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

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

[_shapeView.layer renderInContext:UIGraphicsGetCurrentContext()];

我尝试修改CALayerframe,但是没有任何变化。修改bounds属性会使事情变得更糟。我找到唯一有用的解决方法是:

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

但是,当我处理许多图形时,这种方法并不实用,我希望只使用frame属性。


这是预料中的情况。试想一下如果情况相反会意味着什么。无论如何,尝试更改bounds的起点。 - David Rönnqvist
@DavidRönnqvist 谢谢,更改边界会导致绘图的上部6像素和左部5像素被切割 :( ,即不起作用。 - Mazyod
我发现了CGContextDrawLayer方法,但当我尝试使用它们时会抛出EXE_BAD_ACCESS错误。我猜最好还是避免使用它们。 - Mazyod
1个回答

31

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

关于CGContextDrawLayer,它不是用于CALayer,而是用于CGLayer。这两个东西非常不同,这解释了您的崩溃。


这也是其他在调用“-renderInContext:”之前修改上下文的好提示!因此,正确的方法是先准备好您的上下文,然后再将其渲染到其中。 - Lukáš Kubánek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接