【发布时间】:2012-07-14 08:06:33
【问题描述】:
我在 Illustrator 中创建了一个特殊的椭圆,我需要在我的应用程序中绘制它。我使用 Qwarkee 将其转换为核心图形代码,主要使用:
void CGPathAddCurveToPoint (CGMutablePathRef path, const CGAffineTransform *m, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y);
代码如下:
CGMutablePathRef pPath_0 = CGPathCreateMutable();
CGPathMoveToPoint(pPath_0, NULL, 515.98,258.24);
CGPathAddCurveToPoint(pPath_0, NULL, 515.98,435.61,415.54,515.98,258.24,515.98);
CGPathAddCurveToPoint(pPath_0, NULL, 100.94,515.98,0.50,435.61,0.50,258.24);
CGPathAddCurveToPoint(pPath_0, NULL, 0.50,80.86,100.94,0.50,258.24,0.50);
CGPathAddCurveToPoint(pPath_0, NULL, 415.54,0.50,515.98,80.86,515.98,258.24);
CGPathCloseSubpath(pPath_0);
这个比例大小的椭圆的直径是 515.98。现在我想更改代码,以便无论大小如何,椭圆都会被拉伸以适合我的视图边界。端点很明显,我可以使用视图的高度和宽度来确定这一点。但是,我无法理解如何确定控制点。我是否将这些视为视图高度/视图宽度的比例?不确定我是否完全理解贝塞尔路径的数学运算,因此当视图水平或垂直拉伸时,我可以保持相同数量的曲线。
【问题讨论】:
-
您是否尝试过使用
CGContextScaleCTM()来扩展整个上下文?我相信这将使您保持所有绘图原样;您只需传递您假设的宽度/高度与视图实际具有的宽度/高度的比例。 -
你知道是否可以拉伸 mutablePath 吗? @KevinGrant
-
“我是否将这些视为视图高度/视图宽度的比例?”好吧,如果您尝试这样做会发生什么? (提示:它应该可以正常工作。)
-
@CoDEFRo 我不认为您可以缩放路径,您可以在添加每个元素时对其应用转换(上面所有调用中的
NULL参数)或缩放上下文在你画东西之前。 -
您可以通过使用
CGPathCreateCopyByTransformingPath或CGPathCreateMutableCopyByTransformingPath应用缩放变换来缩放路径。应该相当于@KevinGrant 提到的两种方式。
标签: iphone ios cocoa-touch geometry core-graphics