iPhone - 将UIBezierPath复制到CGPath并渲染为原始
我创建了由多个路径段(实线,虚线,线条,颜色,弧线等)组成的复杂UIBezierPath。因此,我有这个现在我想要将其渲染为CGContext。iPhone - 将UIBezierPath复制到CGPath并渲染为原始
所以,我将其转换为使用
CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath);
的问题CGPathReference是这样的:从理论上说,如果我要画上一个CGContext上的路径,我必须定义笔画的宽度,颜色,行样式,混合模式等等,但是我已经创建的UIBezierPath包含了所有这些信息。
因此,我想知道是否有一种方法可以将CGPath“加盖”在CGContext上,因此它会加盖所有原始信息?
谢谢。
DR,你是对的:这很混乱!
但我认为汤姆是正确的,只需使用[aBezierPath stroke]。
所以,这将是这样的:
REF是(CGContextRef),你已经建立。
YOURBEZIERPATH是(UIBezierPath *)。
不可避免的,你必须处理与“引倒挂”的问题,所以:
UIGraphicsPushContext(REF);
CGContextSaveGState(REF);
CGContextTranslateCTM(REF, 0, the height*);
CGContextScaleCTM(REF, 1.0, -1.0);
[YOURBEZIERPATH stroke];
CGContextRestoreGState(REF);
UIGraphicsPopContext();
所以这是它。
Re 您的评论下面:我有一个UIBezierPaths数组。每个贝塞尔都有自己的风格和颜色。
这是否对您有帮助? ...更换一个“中风”号召,用一个for循环:
UIGraphicsPushContext(REF);
CGContextSaveGState(REF);
CGContextTranslateCTM(REF, 0, the height*);
CGContextScaleCTM(REF, 1.0, -1.0);
for each of YOURBEZIERPATH in your array...
{
CGContextSaveGState(REF);
[YOURBEZIERPATH stroke];
CGContextRestoreGState(REF);
}
CGContextRestoreGState(REF);
UIGraphicsPopContext();
你其实并不需要使用aBezierPath.CGPath,或者,它们的副本打扰。
你是对的,它是非常混乱,UI和CG的两个世界!
* 身高:经常像self.frame.size.height。我只是将它包括在任何寻找未来通用示例代码的人中。
谢谢,这几乎适用于我。我唯一的问题是:我有一系列UIBezierPaths,我必须绘制到上下文。每个贝塞尔都有自己的风格和颜色。当我使用自己的方法在循环中描述路径时,每次调用方法时,所有路径(包括先前被抚摸的路径)都会更改为最后指定的样式。例如:我有3条路径:虚线/蓝色,固体/红色,固体/绿色。第一次运行后,我有一个虚线/蓝色路径。第二次运行后,我有两个固体/红色路径,第三次运行后,所有路径都变为固体/绿色。 – SpaceDog 2011-06-11 17:33:43
谢谢乔,我误解了一些概念,但现在它像魔术一样工作。谢谢!!! – SpaceDog 2011-06-12 21:27:21
不,我做了相反的事情,每次我需要更新某些东西时,我会绘制所有路径。绘制所有路径并不像我想象的那么慢,那么它运行得非常好。 – SpaceDog 2011-06-13 19:22:45
你不能只使用UIBezierPath的笔画方法吗? – 2011-06-11 11:45:48