UIColor SetFill не работает

В этом коде

for (int i=0;i<3;i++) {
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*(i+1), self.yShift+self.rectLen*10);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*(i+1), self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10);
    CGContextMoveToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10);
}
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*4, self.yShift+self.rectLen*10);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*4, self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*3, self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*3, self.yShift+self.rectLen*10);
    [[UIColor cyanColor] setFill];
    [[UIColor blackColor] setStroke];
    CGContextSetLineWidth(context, 1);
    CGContextDrawPath(context, kCGPathStroke);

Линия с методом setFill не работает. Что может быть проблемой? Код находится в drawRect: method

Ответ 1

setFill - это не для графического рисунка основной графики, а для рисования, как [myUIBezierPath fill];

Вместо этого установите цвет заливки и цвет обводки, используя:

CGContextSetFillColorWithColor(context, [[UIColor cyanColor] CGColor]);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);

Кроме того, следующая строка:

CGContextDrawPath(context, kCGPathStroke);

Погладит только путь, так как для режима рисования установлено значение kCGPathStoke. Чтобы заполнить его, вы должны заменить его на

CGContextDrawPath(context, kCGPathFillStroke);

Если ваш путь имеет отверстия в нем или пересекает себя, вы должны использовать четное заполнение и штрих

CGContextDrawPath(context, kCGPathEOFillStroke);

Ответ 2

Вам нужно не только вызвать соответствующие методы CG* для установки заливки, как предложил Дэвид, вам нужно выполнить заполнение, используя следующее после того, как вы установите свойства заливки и обводки:

CGContextSetFillColorWithColor(context, [UIColor cyanColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor.CGColor);
CGContextFillPath(context);
CGContextStrokePath(context);