Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-将UIBezierPath复制到CGPath并渲染为原始路径_Iphone_Quartz Graphics_Uibezierpath - Fatal编程技术网

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

iPhone-将UIBezierPath复制到CGPath并渲染为原始路径,iphone,quartz-graphics,uibezierpath,Iphone,Quartz Graphics,Uibezierpath,我创建了一个复杂的UIBezierPath,它由多个路径段组成,包括实线、虚线、直线、颜色、圆弧等。因此,我有了这些,现在我想将其渲染到CGContext 因此,我使用 CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath); 问题是:理论上,如果我想在CGContext上绘制一条路径,我必须为需要不同的每个线段定义笔划宽度、颜色、线条样式、混合模式等,但我已经创建的UIBezierPath包含所有这些信息 因此,我想知道是否有一种方法可

我创建了一个复杂的UIBezierPath,它由多个路径段组成,包括实线、虚线、直线、颜色、圆弧等。因此,我有了这些,现在我想将其渲染到CGContext

因此,我使用

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,我在一些概念上弄错了,但现在它像魔术一样工作。谢谢不,我做了相反的操作,每次我需要更新某些内容时,我都会绘制所有路径。绘制所有路径并不像我想象的那么慢,那么它工作得很好。