我创建了一个复杂的UIBezierPath,它由几个路径段组成,包括实线,虚线,线条,颜色,弧等。所以我有了这个,现在我想把它呈现给CGContext。
因此,我使用
将其转换为CGPathReferenceCGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath);
问题在于:理论上,如果我想在CGContext上绘制路径,我必须为每个需要不同的段定义笔划宽度,颜色,线条样式,混合模式等,但是我已创建的UIBezierPath包含所有这些信息。
所以,我想知道是否有办法在CGContext中“标记”CGPath,因此它将标有所有原始信息?
感谢。
答案 0 :(得分:6)
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();
就是这样。
重新您的评论:我有一系列UIBezierPaths。每个bezier都有自己的风格和颜色。
这有帮助吗? ...用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。我只是将其包含在将来寻找一般示例代码的任何人中。