2010-02-12 20 views
12

Ich habe durch die Dokumentation gelesen, aber es ist mir nicht sofort klar, wie man ein Polygon mit CGPath zeichnet. Alles, was ich tun muß, ist CGPath um so etwas zu zeichnen:Wie zeichnet man Polygone mit CGPath?

__ 
\ \ 
\ \ 
    \__\ 

Könnte jemand bitte Schnipsel darüber, wie dies zu tun?

Außerdem gehe ich davon aus CGPathContainsPoint wird mir helfen, festzustellen, ob ein Punkt innerhalb solchen Weges ist ?, oder hat der Pfad hat eine feste Zeichnung

auch sein, wie kann ich die CGPath bewegen? Ist das so einfach wie etwas wie den Ursprung zu ändern, genau wie in cgrect?

Vielen Dank.

-Oscar

Antwort

13

Sie sollten es tun, wie folgt:

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

Hinweis hier die Punkte ist die Anordnung der Punkte, die Sie für das Polygon zeichnen möchten. Es sollte also ein kreisförmiger Pfad sein: Sie zeichnen ein Dreieck aus Punkten (x1, x2, x3), dann sollten Sie in das Array (x1, x2, x3, x1) übergehen.

Hoffe, das hilft.

+0

Sie ein Array nicht hier verweisen, die Sie gerade den gleichen Punkt wiederholt hinzuzufügen. –

+1

@David Ich dachte, das wurde verstanden –

+0

Vielen Dank für Ihre Hilfe. –

2

Stanfords CS193P-Klasse auf dem iPhone hatte ein Projekt namens HelloPoly, das genau das ist, was Sie wollen - sehen Sie für die Spezifikation und dann sehen Sie das Video für wie es implementiert wurde (und Google-Lösungen von Leuten, die die Aufgabe).

5

Siehe Apples QuartzDemo Anwendung. Es verfügt über einen Code, um dies zu tun, sowie viele andere Quartz Zeichenfunktionen.

16

Dies ist ein Beispiel, wie ein Dreieck mit CGPath erstellt wird, Sie müssen nur die Punkte setzen.

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 

Dies ist das Ergebnis

Triangle with CGPath

+3

+1 für die tatsächliche Verwendung von CGPath wie der Asker wollte. – Tim