Come disegnare poligoni con CGPath?
-
20-09-2019 - |
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
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
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).