2012-02-22 8 views
19

Potrzebuję narysować sześciokąt i wypełnić go kompozycją kolorów z obrazem jako wzorem. zrobiłem:CoreGraphics FillPath and Stroke Path

CGContextSaveGState(context); 
CGContextSetLineCap(context, kCGLineCapRound); 
CGContextSetFillColorWithColor(context, [[UIColor colorWithPatternImage:[UIImage imageNamed:@"patternerba.png"]] CGColor]); 
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]); 
CGContextSetLineWidth(context, 3.0); 
// drawing hexagon here... 
CGContextStrokePath(context); 
CGContextFillPath(context); 
[[NSString stringWithFormat:@"Foo"] drawAtPoint:innerRect.origin withFont:[UIFont fontWithName:@"Helvetica" size:16]]; 
CGContextRestoreGState(context); 

ale w zależności od kolejności CGContextStrokePath i CGContextFillPath, otrzymuję sześciokąt graniczy ale nie wypełnione lub wypełnione, ale nie graniczy. Jak mogę to naprawić?

+0

zwiększyć szerokość w CGContextSetLineWidth .. –

Odpowiedz

31

Spróbuj

CGContextDrawPath(context, kCGPathFillStroke); 

Zamiast

CGContextStrokePath(context); 
CGContextFillPath(context); 
+0

Działa świetnie. Dziękuję Ci. – IssamTP

+0

Zrobiłeś mój dzień. Dzięki –

0

Albo użyć

CGContextDrawPath(context, kCGPathFillStroke); 

jak sch zasugerował, lub narysować sześciokąt ponownie przed wywołaniem FillPath. StrokePath i FillPath usuwają ścieżkę dodaną do kontekstu, dzięki czemu następne wywołanie zakończy się niepowodzeniem bez ścieżki.

CGPathRef path = /* drawing hexagon here */; 
CGContextAddPath(context, path); 
CGContextStrokePath(context); 
CGContextAddPath(context, path); 
CGContextFillPath(context); 

Uwaga: dwa segmenty kodu nie są równoważne i dają różne wyniki.