我如何在Core Graphics中绘制这样的东西

时间:2010-03-04 17:30:25

标签: iphone core-graphics cgcontext

我希望能够使用它作为我的笔画。我怎么能尽可能高效地做到这一点,而且在飞行中,我在考虑CGPatternRef,但我真的不知道该怎么做。

修改 它不需要扭曲到路径。我只是不能在Illustrator中解决这个问题。 alt text

4 个答案:

答案 0 :(得分:3)

您可以尝试将Illustrator文档导入此应用程序:Opacity,然后执行“导出为源代码”。

请参阅此处:http://likethought.com/opacity/workflow/了解更多信息。

答案 1 :(得分:3)

Apple doc是否有帮助?

请参阅Quartz 2D Programming Guide, How Patterns Work中的部分或一般的模式。

以下是如何画一个开头(从上面的文档中),PSIZE是星号:

static void MyDrawStencilStar (void *info, CGContextRef myContext)
{
    int k;
    double r, theta;

    r = 0.8 * PSIZE / 2;
    theta = 2 * M_PI * (2.0 / 5.0); // 144 degrees

    CGContextTranslateCTM (myContext, PSIZE/2, PSIZE/2);

    CGContextMoveToPoint(myContext, 0, r);
    for (k = 1; k < 5; k++) {
        CGContextAddLineToPoint (myContext,
                    r * sin(k * theta),
                    r * cos(k * theta));
    }
    CGContextClosePath(myContext);
    CGContextFillPath(myContext);
}

只需添加曲线变换,并在每个点绘制星形。

这是simple C code to calculate points on cubic bezier curve

答案 2 :(得分:2)

您需要走路径并以相等的距离(沿路径)计算曲线的坐标。这很便宜。旋转变得有点多毛(围绕切线旋转),但总的来说,这是一个基本的bézier curve问题。只需求解曲线方程并在每个顶点渲染一个星。

没有任何内置可以做到这一切。您可以查询交点的点,但只有渲染才能解决曲线。这是由CoreGraphics封装的,所以你不能把它拉出来或利用它们已有的东西。

这是你应该考虑自己写的东西。这并不困难;诚实。只需要对微积分有基本的了解......如果有的话。如果您自己编写,如果愿意,甚至可以添加变形效果。

答案 3 :(得分:0)

这看起来像OpenGL的工作。 CoreGraphics没有提供任何简单的方法,根据它们与路径的接近程度来扭曲星星。

相关问题