【问题标题】:How can I use CGContextRef to draw two separate shapes如何使用 CGContextRef 绘制两个单独的形状
【发布时间】:2014-08-19 13:30:29
【问题描述】:

我在很多时间都遇到了一个问题,就是简单地绘制两个单独的形状(例如矩形)

具体来说,我有一个数据源,它是一个数组,这个数组包含包含 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);
}

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

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

任何帮助将不胜感激。非常感谢。

【问题讨论】:

    标签: ios cocoa drawrect cgcontext


    【解决方案1】:

    绘制单个项目。

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

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

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

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

    【讨论】:

    • 我尝试在开始新路径之前将 CGContextMoveToPoint 添加到随机位置,或者在移动到下一个多边形的初始点后开始新路径,仍然无法正常工作。我认为我的代码逻辑应该有问题。
    • 好的,有点尴尬,错误来自我生成数组的过程。你的答案是正确的,现在我可以绘制分离的多边形了。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2022-09-25
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2016-02-23
    • 2019-08-16
    相关资源
    最近更新 更多