2013-12-20 3 views
0

Я создал подкласс UIView, который содержит две концентрические круги. Я заполняю промежуток между ними цветом. Мой код выглядит следующим образом:Как заполнить зазор между концентрическим кругом, используя два разных цвета?

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGContextAddEllipseInRect(ctx, rect); 
CGContextAddEllipseInRect(ctx, CGRectMake(rect.origin.x + self.thick, 
              rect.origin.y + self.thick, 
              rect.size.width - 2 * self.thick, 
              rect.size.height - 2 * self.thick)); 
[self.fillColor set]; // Fill color is color value 
CGContextEOFillPath(ctx); 

Это заполнить пробел одним цветом, я задавался вопросом, могу ли я заполнить пробел, используя два разных цвета? Например, половина зазора заполнена белым цветом, а другая - серой.

ответ

0

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

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGContextAddEllipseInRect(ctx, rect); 
CGContextAddEllipseInRect(ctx, CGRectMake(rect.origin.x + self.thick, 
              rect.origin.y + self.thick, 
              rect.size.width - 2 * self.thick, 
              rect.size.height - 2 * self.thick)); 
[self.fillColor set]; // Fill color is color value 
CGContextEOFillPath(ctx); 

CGContextAddRect(ctx,tophalfRect); 
CGContextClip(); 
CGContextAddEllipseInRect(ctx, rect); 
CGContextAddEllipseInRect(ctx, CGRectMake(rect.origin.x + self.thick, 
              rect.origin.y + self.thick, 
              rect.size.width - 2 * self.thick, 
              rect.size.height - 2 * self.thick)); 
[self.fillColor2 set]; // Fill color is color value 
CGContextEOFillPath(ctx); 

Вы можете сделать это с меньшим количеством призывов к обращению, если вас беспокоит производительность.

0
/*program for concentric circles with color fill*/ 
#include<stdio.h> 
#include<conio.h> 
#include<graphics.h> 
void main() 
{ 
clrscr(); 
int gd,gm; 
gd=DETECT; 
initgraph(&gd,&gm,"c:\\turboc3\\bgi"); 
int rad,i=1; 
for(rad=100;rad>=10;rad++) 
{ 
setcolor(i); 
circle(340,220,rad); 
setfillstyle(SOLID_FILL,i); 
floodfill(340,220,i); 
rad=rad-10; 
i++; 
} 

getch(); 
closegraph(); 
}