2012-02-22 25 views
19

六角形を描き、パターンとしてImageを持つカラービルドで塗りつぶす必要があります。 私がやった:CoreGraphics塗りつぶしのパスとストロークパス

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

しかしCGContextStrokePathとCGContextFillPathの順番から依存し、私は縁取られた六角形を取得しますが満たされたか、満たされたが、縁取られないではありません。これをどうすれば解決できますか?

+0

CGContextSetLineWidthの幅を増やします。 –

答えて

31

CGContextDrawPath(context, kCGPathFillStroke); 

代わりの

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

素晴らしいです。ありがとうございました。 – IssamTP

+0

あなたは私の一日を作った。ありがとう –

0

SCHが提案されているよう

CGContextDrawPath(context, kCGPathFillStroke); 

を使用するか、またはFillPathを呼び出す前に、もう一度、六角形を描くのいずれかを試してみてください。 StrokePathとFillPathは、コンテキストに追加したパスを削除します。したがって、次の呼び出しはパスなしで黙って失敗します。

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

注:コードの2つのセグメントは同等ではなく、異なる結果をもたらします。

関連する問題