我经历了大量时间的问题,这很简单,绘制了两个独立的形状(例如矩形)
具体来说,我有一个数据源是一个数组,这个数组包含包含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);
}
换句话说我的问题。第一个形状的最后一个点将具有第二个形状第一个点的路径,而第一个形状的最后一个点具有第二个形状第一个点的路径。
有没有人可以帮我找到逻辑问题在哪里?
任何帮助将非常感谢。非常感谢。
答案 0 :(得分:3)
绘制单个项目。
CGContextMoveToPoint
CGContextBeginPath
CGContextMoveToPoint // (repeat as needed)
CGContextClosePath
CGContextStrokePath
要绘制多个多边形,只需重复整个块。
在开始第二条路径之前,似乎您的问题缺少CGContextMoveToPoint
。如果不移动到新点,则路径将从最后一个多边形的末尾开始。来自CGContextClosePath
关闭子路径后,您的应用程序可以开始一个新的子路径 没有先调用CGContextMoveToPoint。在这种情况下,一个新的 隐含地创建子路径,起始点和当前点相等 到上一个子路径的起点。