2014-02-04 2 views
0

Я пытаюсь нарисовать бар. Я установил цвет и цвет заливки. Хотя я устанавливаю путь с цветом заливки, его не заполняется. Этот код рисует прямоугольник.Путь не заполняется цветом

blocks = yValue/yInterval; //Total number of blocks 
    divider = (self.bounds.size.height * 0.75 - 100)/ blocks ;//height for each block 

    float factor = value/yValue; 
     //NSLog(@"%f",factor); 
     int size = 40; 
     [[UIColor redColor] setFill]; 
     [[UIColor redColor] setStroke]; 
     UIBezierPath *path = [[UIBezierPath alloc]init]; 

     CGPoint x1 = CGPointMake(0 + 100 + (index * size), self.bounds.size.height * 0.75); 
     CGPoint x2 = CGPointMake(x1.x + size,self.bounds.size.height * 0.75); 
     // float height = (self.bounds.size.height * 0.75) - ((self.bounds.size.height * 0.75) * factor) + 5; 
     float height = self.bounds.size.height * 0.75 - (divider * factor * blocks); 
     CGPoint y1 = CGPointMake(x1.x, height); 
     CGPoint y2 = CGPointMake(x2.x, height); 

     [path moveToPoint:x1]; 
     [path addLineToPoint:x2]; 
     [path moveToPoint:x2]; 
     [path addLineToPoint:y2]; 
     [path moveToPoint:y2]; 
     [path addLineToPoint:y1]; 
     [path moveToPoint:y1]; 
     [path addLineToPoint:x1]; 

     [path closePath]; 
     [path fill]; 
     [path stroke];` 
+0

Вы уверены, что код работает? является ли контекст действительным? является ли слой/вид, где вы рисуете, видимым и имеющим ненулевой размер? он подключен? – nielsbot

+0

Да, это так. У меня есть этот код в методе, который вызывается из метода drawRect. –

ответ

3

Это потому, что вы не правильно рисуете замкнутый путь. Вы просто рисуете 4 отдельные строки.

Попробуйте это ...

// all your setup code... 

[path moveToPoint:x1]; 
[path addLineToPoint:x2]; 
[path addLineToPoint:y2]; 
[path addLineToPoint:y1]; 
[path addLineToPoint:x1]; 

[path closePath]; 
[path fill]; 
[path stroke]; 

Это должно работать.

Немного объяснения

Из документов метода closePath ...

Закрывает текущий подпуть, создавая отрезок между первыми и последними точками текущего подпути.

moveToPoint запустит новый субпат в пределах текущего пути.

Это используется ... константы выглядит

Move to P1.  Path = 0. 
Add line to P2. Path = P1-P2. 
Add line to P3. Path = P1-P2-P3. 
Close path.  Path = P1-P2-P3(-P1). 

Что вы делаете ...

Move to P1.  Path = 0. 
Add line to P2. Path = P1-P2. 
Move to P2.  Path = P1-P2. 
Add line to P3. Path = P1-P2 | P2-P3. 
Move to P3.  Path = P1-P2 | P2-P3. 
Add line to P1. Path = P1-P2 | P2-P3 | P3-P1. 
Close path.  Path = P1-P2 | P2-P3 | P3-P1(-P3). 

Все, что вы закрыли это последняя строка Подпуть. Переход к точке приведет к запуску нового подпути в пути.

+1

Спасибо! Понял! –

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