iPhone - 将UIBezierPath复制到CGPath并渲染为原始

问题描述:

我创建了由多个路径段(实线,虚线,线条,颜色,弧线等)组成的复杂UIBezierPath。因此,我有这个现在我想要将其渲染为CGContext。iPhone - 将UIBezierPath复制到CGPath并渲染为原始

所以,我将其转换为使用

CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath); 

的问题CGPathReference是这样的:从理论上说,如果我要画上一个CGContext上的路径,我必须定义笔画的宽度,颜色,行样式,混合模式等等,但是我已经创建的UIBezierPath包含了所有这些信息。

因此,我想知道是否有一种方法可以将CGPath“加盖”在CGContext上,因此它会加盖所有原始信息?

谢谢。

+1

你不能只使用UIBezierPath的笔画方法吗? – 2011-06-11 11:45:48

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。我只是将它包括在任何寻找未来通用示例代码的人中。

+0

谢谢,这几乎适用于我。我唯一的问题是:我有一系列UIBezierPaths,我必须绘制到上下文。每个贝塞尔都有自己的风格和颜色。当我使用自己的方法在循环中描述路径时,每次调用方法时,所有路径(包括先前被抚摸的路径)都会更改为最后指定的样式。例如:我有3条路径:虚线/蓝色,固体/红色,固体/绿色。第一次运行后,我有一个虚线/蓝色路径。第二次运行后,我有两个固体/红色路径,第三次运行后,所有路径都变为固体/绿色。 – SpaceDog 2011-06-11 17:33:43

+0

谢谢乔,我误解了一些概念,但现在它像魔术一样工作。谢谢!!! – SpaceDog 2011-06-12 21:27:21

+0

不,我做了相反的事情,每次我需要更新某些东西时,我会绘制所有路径。绘制所有路径并不像我想象的那么慢,那么它运行得非常好。 – SpaceDog 2011-06-13 19:22:45