14

我一直在阅读文档,但是我并不清楚如何使用 CGPath 绘制多边形。我需要做的就是围绕这样的东西绘制 CGPath:

__
\  \ 
 \  \
  \__\

谁能提供一个关于如何做到这一点的片段?

此外,我假设 CGPathContainsPoint 将帮助我确定一个点是否在这样的路径内?或者路径必须是实体图

另外我怎样才能移动cgpath?这是否像在 cgrect 中一样更改原点之类的东西一样简单?

谢谢你。

-奥斯卡

4

5 回答 5

19

这是一个如何使用 CGPath 创建三角形的示例,您只需放置点。

var path = CGPathCreateMutable()
CGPathMoveToPoint(path, nil, 0, 0) //start from here
CGPathAddLineToPoint(path, nil, 20, 44) 
CGPathAddLineToPoint(path, nil, 40, 0) 
CGPathAddLineToPoint(path, nil, 0, 0)

//and to use in SpriteKit, for example

var tri = SKShapeNode(path: path) 
var color = NSColor.blueColor()
tri.strokeColor = color
tri.fillColor = color

这是结果

带有 CGPath 的三角形

于 2014-08-12T12:41:59.943 回答
13

你应该这样做:

- (void)drawRect:(CGRect)rect { 

        CGContextRef context = UIGraphicsGetCurrentContext(); 

        CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
        CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);

        // Draw them with a 2.0 stroke width so they are a bit more visible.
        CGContextSetLineWidth(context, 2.0);

        for(int idx = 0; idx < self.points.count; idx++)
        {

            point = [self.points objectAtIndex:idx];//Edited 
            if(idx == 0)
            {
                // move to the first point
                CGContextMoveToPoint(context, point.x, point.y);
            }
            else
            {
                CGContextAddLineToPoint(context, point.x, point.y);
            }
        }

        CGContextStrokePath(context);
}

请注意,点是要为其绘制多边形的点数组。所以它应该是圆形路径,比如:你正在绘制一个三角形的点,(x1, x2, x3)然后你应该传递给 array (x1, x2, x3, x1)

希望这可以帮助。

于 2010-02-12T05:13:39.537 回答
12

Draelach 的答案更新为Swift 4:

let path = CGMutablePath()
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: 20, y: 44))
path.addLine(to: CGPoint(x: 40, y: 0))
path.addLine(to: CGPoint(x: 0, y: 0))

let tri = SKShapeNode(path: path)
于 2018-05-14T10:54:02.777 回答
5

请参阅 Apple 的QuartzDemo应用程序。它具有执行此操作的代码,以及许多其他 Quartz 绘图功能。

于 2010-02-12T14:03:47.843 回答
2

斯坦福大学在 iPhone 上的 CS193P 课程有一个名为 HelloPoly 的项目,这可能正是您想要的 - 请参阅课程主页以了解规范,然后观看视频了解它是如何实施的(以及完成作业的人提供的谷歌解决方案)。

于 2010-02-12T05:53:50.933 回答