如何用CGPath绘制多边形?

Osc*_*mez 13 iphone core-graphics polygon draw cgpath

我一直在阅读文档但是我并不是立即清楚如何使用CGPath绘制多边形.我需要做的就是在这样的事情周围绘制CGPath:

__
\  \ 
 \  \
  \__\
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供一个如何做到这一点的片段?

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

另外我怎么能移动cgpath?这就像在cgrect中更改像原点一样容易吗?

谢谢.

-Oscar

小智 17

这是如何使用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
Run Code Online (Sandbox Code Playgroud)

这是结果

与CGPath的三角形

  • 实际使用CGPath的+1,就像提问者想要的那样. (3认同)

Mad*_*dav 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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这些点是您要绘制多边形的点数组.所以它应该是圆形路径:你绘制一个三角形的点,(x1, x2, x3)然后你应该传递到数组(x1, x2, x3, x1).

希望这可以帮助.

  • 他可以理解它,但我认为通常最好发布正确的代码或明确声明代码包含错误/遗漏.在教授一个新概念时,对于老师来说,显而易见的事情可能是复杂的,也很难让学生看到. (2认同)

Bra*_*son 5

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


Geo*_*f H 5

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)
Run Code Online (Sandbox Code Playgroud)