如何在CGContext CGMutablePathRef上绘制顶点?

时间:2012-04-25 21:52:42

标签: ios render cgcontext

我正在绘制一组连接线,因为用户输入了点击以指定顶点。我正在构建一个CGMutablePathRef

- (void)addPointToCGMPR: (CGPoint)p
      forNewPolygon: (BOOL)newPoly
{
    if (newPoly)
    {
        CGPathMoveToPoint(cgmpr, NULL, p.x, p.y);
    }
    else
    {
        CGPathAddLineToPoint(cgmpr, NULL, p.x, p.y);
    }
    [self setNeedsDisplay];
}

drawRect:在输入每个点后调用,并将上下文CGMutablePathRef添加到CGContext中进行显示

- (void)drawRect:(CGRect)rect
{    
    // Set up a context to display
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextAddPath(context, cgmpr);

    CGContextSetLineWidth(context, 1);
    CGContextStrokePath(context);  

    // If NOT empty then Close the context so that box comparison can occur later
    if (!CGContextIsPathEmpty(context))
    {
        CGContextClosePath(context);
    }
}

我正在按照预期在屏幕上显示线条。我的麻烦在于,在用户选择第一个点之后,屏幕上没有呈现任何内容,并且用户不知道系统是否在第二个点被输入之前获得了他的第一个选择。我希望系统在输入下一个点之前渲染第一个点。我还希望系统能够以一种视觉上不同的方式渲染每个顶点 - 现在我没有渲染顶点,只有线条。有没有办法让CGContext呈现点?有没有办法指定渲染这些点的样式?感谢。

2 个答案:

答案 0 :(得分:1)

没有。您需要通过添加另一个CGPath来自己渲染它们来描述您想要表示顶点的任何内容。由于您可能经常绘制它,因此您可能希望将其渲染为CGLayer,以便您可以轻松地将其复制到您需要的位置。您还可以将顶点绘制到CALayers上,以便轻松移动它们。但是由你来设计和管理这部分图纸。

答案 1 :(得分:1)

你可以自由地绘制你想要代表点的任何东西:一个小方块,一个小圆圈,一个图钉图像等等。你已经知道如何绘制到一个上下文中;只需循环你的点并绘制它们,但你希望它们出现。我个人倾向于使用CGContextFillEllipseInRect来做这样的事情。对于每个点,创建一个围绕该点的矩形并绘制它:

CGFloat pointSize = 4;
CGRect pointRect = CGRectMake(point.x - pointSize / 2, point.y - pointSize / 2, pointSize, pointSize);
CGContextFillEllipseInRect(context, pointRect);