2012-05-16 3 views
1

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

+0

Когда вы говорите «не ж ork ", вы имеете в виду, что что-то не так с рисунком или просто с цветами? Заполнение используется для заполнения пути, для поглаживания пути используется штрих (цвет линии). Похоже, вы говорите, что хотите, чтобы линия выглядела голубым цветом, что означало бы, что вместо этого вы должны использовать setStroke. – Matt

+0

Я хочу, чтобы прямоугольник казался голубым, но он не – Alexander

ответ

5

setFill не для графического рисунка Core Graphics, а для рисования, как [myUIBezierPath fill];

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

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

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

CGContextDrawPath(context, kCGPathStroke); 

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

CGContextDrawPath(context, kCGPathFillStroke); 

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

CGContextDrawPath(context, kCGPathEOFillStroke); 
+0

попробовал, но исправления все еще не заполнены. – Alexander

+0

А ... теперь я вижу ... вы только гладили путь, а не заполняли. Я обновил свой ответ –

+0

проклятый друг спасибо, я думаю, что не узнаю, что сам – Alexander

1

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

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

Ваш код не погладит путь. Путь очищается после каждой операции рисования, поэтому после операции заполнения не будет пути, оставшегося до штриха. –

+0

Возможно, я ошибаюсь ... второй взгляд на документацию упоминает только очищение пути при поглаживании, а не заполнение («Как побочный эффект при вызове этой функции, Quartz очищает текущий путь». (Из CGContextStrokePath)) –

Смежные вопросы