0

当用户输入单击以指定顶点时,我正在绘制一组连接线。我正在构建一个 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 渲染点?有没有办法指定渲染这些点的样式?谢谢。

4

2 回答 2

1

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

于 2012-04-25T22:00:32.153 回答
1

你可以随意画出任何你想代表点的东西:一个小正方形、一个小圆圈、一个图钉的图像等。你已经知道如何在上下文中绘制;只需循环您的点并绘制它们,但是您希望它们出现。我个人倾向于使用CGContextFillEllipseInRect这样的东西。对于每个点,制作一个围绕该点的矩形并绘制它:

CGFloat pointSize = 4;
CGRect pointRect = CGRectMake(point.x - pointSize / 2, point.y - pointSize / 2, pointSize, pointSize);
CGContextFillEllipseInRect(context, pointRect);
于 2012-04-25T22:03:29.320 回答