如何在CGContext CGMutablePathRef上绘制顶点?

当用户input点击来指定顶点时,我绘制了一组连接线。 我构build了一个CGMutablePathRef

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

然后在input每个点之后调用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); } } 

我正在看屏幕上的线条。 我的麻烦是,在用户select第一个点后,屏幕上没有任何渲染,用户不知道系统是否有第一个select,直到第二个点进入。 我希望系统在input下一个点之前提供第一个点。 我还希望系统渲染每个以视觉上不同的方式拾取的顶点 – 现在我没有获取顶点渲染,只有线。 有没有办法让CGContext来渲染点? 有没有一种方法来指定这些点呈现的样式? 谢谢。

你可以自由地绘制任何想要表示的点:一个小方块,一个小圆圈,一个图钉的图像等等。你已经知道如何绘制上下文; 只是循环你的观点,并绘制他们,但是你想让他们出现。 我个人倾向于使用CGContextFillEllipseInRect的事情。 对于每个点,围绕这个点做一个矩形并画出它:

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

不需要。您需要通过添加另一个CGPath来描述您想要表示顶点的任何内容。 既然你可能会经常画这个,你可能想把它渲染到一个CGLayer,所以你可以很容易地将它复制到你需要的地方。 您也可以将顶点绘制到CALayers上,以便轻松移动它们。 但是,devise和pipe理绘图的这一部分取决于你。