Подтвердить что ты не робот

CoreGraphics FillPath и траектория пути

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

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

4b9b3361

Ответ 1

Try

CGContextDrawPath(context, kCGPathFillStroke);

Вместо

CGContextStrokePath(context);
CGContextFillPath(context);

Ответ 2

Используйте

CGContextDrawPath(context, kCGPathFillStroke);

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

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

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