如何使用CGContextRef绘制两个单独的形状

时间:2014-08-19 13:30:30

标签: ios cocoa drawrect cgcontext

我经历了大量时间的问题,这很简单,绘制了两个独立的形状(例如矩形)

具体来说,我有一个数据源是一个数组,这个数组包含包含CGPoints的子数组。我想要做的只是基于每个子阵列绘制路径,并且必须将它们分开。

这是我目前的代码

// for each room
for (int i=0; i<rooms.count; i++) {

    // configurations
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextBeginPath(context);
    CGContextSetLineWidth(context, 3.0f);
    CGContextSetLineJoin(context, kCGLineJoinBevel);
    CGContextSetStrokeColorWithColor(context, [UIColor darkGrayColor].CGColor);

    // create sub-path
    CGMutablePathRef pathRef = CGPathCreateMutable();

    // get the points, at least 3
    NSArray *corners = rooms[i];

    // get the initial point
    CGPoint initialPoint = [corners[0] CGPointValue];
    CGPathMoveToPoint(pathRef, NULL, initialPoint.x, initialPoint.y);

    // draw paths
    for (int j=1; j<corners.count; j++) {
        CGPoint nextPoint = [corners[j] CGPointValue];
        CGPathAddLineToPoint(pathRef, NULL, nextPoint.x, nextPoint.y);
    }

    // once finish, add the last line to the initial point
    CGPathAddLineToPoint(pathRef, NULL, initialPoint.x, initialPoint.y);
    CGPathCloseSubpath(pathRef);

    CGContextAddPath(context, pathRef);
    CGContextStrokePath(context);

    // all done, release the path
    CGPathCloseSubpath(pathRef);
    CGPathRelease(pathRef);
}

换句话说我的问题。第一个形状的最后一个点将具有第二个形状第一个点的路径,而第一个形状的最后一个点具有第二个形状第一个点的路径。

有没有人可以帮我找到逻辑问题在哪里?

任何帮助将非常感谢。非常感谢。

1 个答案:

答案 0 :(得分:3)

绘制单个项目。

CGContextMoveToPoint
CGContextBeginPath
  CGContextMoveToPoint // (repeat as needed)
CGContextClosePath
CGContextStrokePath

要绘制多个多边形,只需重复整个块。

在开始第二条路径之前,似乎您的问题缺少CGContextMoveToPoint。如果不移动到新点,则路径将从最后一个多边形的末尾开始。来自CGContextClosePath

的文档
  

关闭子路径后,您的应用程序可以开始一个新的子路径   没有先调用CGContextMoveToPoint。在这种情况下,一个新的   隐含地创建子路径,起始点和当前点相等   到上一个子路径的起点。