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: метод

 Matt16 мая 2012 г., 19:42
Когда ты говоришь "не работает", ты имеешь в виду, что с рисунком что-то не так или просто цвета? Заливка используется для заливки контура, обводка (цвет линии) используется для обводки контура. Похоже, вы говорите, что хотите, чтобы линия была голубой, что означало бы, что вместо этого вы должны использовать setStroke для этого цвета.
 Alexander16 мая 2012 г., 20:11
Я хочу, чтобы прямоугольник казался голубым, но это не так

Ответы на вопрос(2)

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

CGContextSetFillColorWithColor(context, [UIColor cyanColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor.CGColor);
CGContextFillPath(context);
CGContextStrokePath(context);
 David Rönnqvist16 мая 2012 г., 20:23
Я могу ошибаться ... хотя во втором взгляде на документацию упоминается только очистка пути при обводке, а не заполнение («В качестве побочного эффекта при вызове этой функции Quartz очищает текущий путь.» (Из CGContextStrokePath))
 David Rönnqvist16 мая 2012 г., 20:20
Твой код не пойдет по пути. Путь очищается после каждой операции рисования, поэтому после операции заливки не останется пути для обводки.
Решение Вопроса

а для рисования, подобного [myUIBezierPath fill];

Instead установить цвет заливки и цвет обводки с помощью:

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

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

CGContextDrawPath(context, kCGPathStroke);

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

CGContextDrawPath(context, kCGPathFillStroke);

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

CGContextDrawPath(context, kCGPathEOFillStroke);
 Alexander16 мая 2012 г., 20:10
попробовал, но все еще не заполне
 David Rönnqvist16 мая 2012 г., 20:15
Ааа ... теперь я вижу ... ты только обводишь путь, а не заполняешь ... Я обновил свой ответ
 Alexander16 мая 2012 г., 20:24
черт побери, спасибо, думаю, я бы сам этого не узнал

Ваш ответ на вопрос