CoreGraphics FillPath и Stroke Path - PullRequest
       22

CoreGraphics FillPath и Stroke Path

20 голосов
/ 22 февраля 2012

Мне нужно нарисовать шестиугольник и заполнить его цветной сборкой с рисунком в качестве шаблона.Я сделал:

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, я получаю шестиугольник граничит, но не заполнен или заполнен, но не ограничен.Как я могу это исправить?

Ответы [ 2 ]

33 голосов
/ 22 февраля 2012

Попробуйте

CGContextDrawPath(context, kCGPathFillStroke);

Вместо

CGContextStrokePath(context);
CGContextFillPath(context);
0 голосов
/ 21 октября 2014

Либо использовать

CGContextDrawPath(context, kCGPathFillStroke);

как предложено sch, или снова нарисуйте шестиугольник перед вызовом FillPath. StrokePath и FillPath удаляют путь, который вы добавили в контекст, поэтому следующий вызов будет молча завершаться ошибкой без пути.

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

Примечание: два сегмента кода не эквивалентны и дают разный результат.

...