5

我创建了一个复杂的 UIBezierPath,它由几个路径段、实线、虚线、线条、颜色、弧线等组成。所以我有了这个,现在我想将它渲染到 CGContext。

因此,我将其转换为 CGPathReference 使用

CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath);

问题是这样的:理论上,如果我想在一个CGContext上画一条路径,我必须为每个需要不同的段定义笔触宽度、颜色、线条样式、混合模式等,但是UIBezierPath我已经创建包含所有这些信息。

所以,我想知道是否有一种方法可以“标记”CGPath,因为它在 CGContext 上,所以它会被标记所有原始信息?

谢谢。

4

1 回答 1

6

博士,你是对的:这非常令人困惑!

但我认为 Tom 是正确的,只需使用 [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();

就是这样了。

在下面回复您的评论我有一组 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。我只是为将来寻找通用示例代码的人提供了这个。

于 2011-06-11T13:50:54.407 回答