Ответ 1
Try
CGContextDrawPath(context, kCGPathFillStroke);
Вместо
CGContextStrokePath(context);
CGContextFillPath(context);
Мне нужно нарисовать шестиугольник и заполнить его цветной строкой с помощью шаблона 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 я получаю шестиугольник, ограниченный, но не заполненный или заполненный, но не ограниченный. Как я могу это исправить?
Try
CGContextDrawPath(context, kCGPathFillStroke);
Вместо
CGContextStrokePath(context);
CGContextFillPath(context);
Используйте
CGContextDrawPath(context, kCGPathFillStroke);
как предложили sch, или снова нарисуйте шестиугольник перед вызовом FillPath. StrokePath и FillPath удаляют путь, который вы добавили в контекст, таким образом, следующий вызов будет бесшумно работать без пути.
CGPathRef path = /* drawing hexagon here */;
CGContextAddPath(context, path);
CGContextStrokePath(context);
CGContextAddPath(context, path);
CGContextFillPath(context);
Примечание: два сегмента кода не эквивалентны и дают разные результаты.