Domanda

Ho letto attraverso la documentazione tuttavia non è immediatamente chiaro a me come disegnare un poligono utilizzando CGPath. Tutto quello che devi fare è disegnare CGPath intorno a qualcosa di simile:

__
\  \ 
 \  \
  \__\

Qualcuno potrebbe fornire un frammento su come fare questo?

Inoltre assumo CGPathContainsPoint aiuterà a determinare se un punto è all'interno tale percorso ?, ovvero se il percorso deve essere un disegno solido

Inoltre come posso spostare la cgpath intorno? È questo semplice come cambiare qualcosa come l'origine, proprio come in CGRect?

Grazie.

-Oscar

È stato utile?

Soluzione

Si dovrebbe fare in questo modo:

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

Si noti qui, i punti è la matrice di punti che si desidera per disegnare il poligono per. Così dovrebbe essere percorso circolare, come:. Si sta disegnando un triangolo di punti (x1, x2, x3) allora si dovrebbe passare in una matrice (x1, x2, x3, x1)

Spero che questo aiuti.

Altri suggerimenti

Questo è un esempio di come creare un triangolo con CGPath, devi solo mettere i punti.

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

Questo è il risultato

Triangolo con CGPath

QuartzDemo l'applicazione di Apple. Essa ha il codice per fare questo, così come molte altre funzioni di disegno di quarzo.

del Draelach risposta aggiornata per 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)

class CS193P di Stanford su iPhone ha avuto un progetto chiamato HelloPoly che potrebbe essere esattamente quello che vuoi - vedi home page classe per le specifiche e poi vedere il video di come è stato implementato (e google soluzioni da parte di persone che hanno fatto l'assegnazione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top