iPhone-将UIBezierPath复制到CGPath并渲染为原始路径
我创建了一个复杂的UIBezierPath,它由多个路径段组成,包括实线、虚线、直线、颜色、圆弧等。因此,我有了这些,现在我想将其渲染到CGContext 因此,我使用iPhone-将UIBezierPath复制到CGPath并渲染为原始路径,iphone,quartz-graphics,uibezierpath,Iphone,Quartz Graphics,Uibezierpath,我创建了一个复杂的UIBezierPath,它由多个路径段组成,包括实线、虚线、直线、颜色、圆弧等。因此,我有了这些,现在我想将其渲染到CGContext 因此,我使用 CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath); 问题是:理论上,如果我想在CGContext上绘制一条路径,我必须为需要不同的每个线段定义笔划宽度、颜色、线条样式、混合模式等,但我已经创建的UIBezierPath包含所有这些信息 因此,我想知道是否有一种方法可
CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath);
问题是:理论上,如果我想在CGContext上绘制一条路径,我必须为需要不同的每个线段定义笔划宽度、颜色、线条样式、混合模式等,但我已经创建的UIBezierPath包含所有这些信息
因此,我想知道是否有一种方法可以像在CGContext上一样“标记”CGPath,这样它就可以标记所有原始信息
谢谢。博士,你说得对:这太令人困惑了 但我认为汤姆是对的,只要使用[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();
就这样
回复你下面的评论:我有一个UIBezierPath数组。每个贝塞尔都有自己的风格和颜色
这有用吗。。。用for循环替换一个“stroke”调用:
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。我只为将来寻找通用示例代码的人提供了此示例。您能不能不使用UIBezierPath的笔划方法?谢谢,这几乎适合我。我唯一的问题是:我有一个UIBezierPath数组,必须绘制到上下文中。每个贝塞尔都有自己的风格和颜色。当我使用您的方法在循环中对路径进行笔划时,每次调用您的方法时,所有路径(包括先前笔划的路径)都会更改为最后指定的样式。例如:我有3条路径:虚线/蓝色、实心/红色、实心/绿色。第一次跑步后,我有一条虚线/蓝色路径。第二次运行后,我有两条实心/红色路径,第三次运行后,所有路径都变为实心/绿色。谢谢Joe,我在一些概念上弄错了,但现在它像魔术一样工作。谢谢不,我做了相反的操作,每次我需要更新某些内容时,我都会绘制所有路径。绘制所有路径并不像我想象的那么慢,那么它工作得很好。