gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:58:03 26 4
gpt4 key购买 nike

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

具体来说,我有一个数据源,它是一个数组,这个数组包含包含 CGPoint 的子数组。我想做的只是根据每个子数组绘制路径,并且它们必须与其他子数组分开。

这是我当前的代码

// 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);
}

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

有谁能帮我看看是哪里的逻辑问题吗?

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

最佳答案

绘制单个项目。

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

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

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

的文档

After closing the subpath, your application can begin a new subpath without first calling CGContextMoveToPoint. In this case, a new subpath is implicitly created with a starting and current point equal to the previous subpath’s starting point.

关于ios - 如何使用 CGContextRef 绘制两个单独的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com