2011-09-30 113 views
0

我正在嘗試創建餅圖。每個餡餅應該有不同的顏色,並有邊框。所以我做了我自己的課PieChart.m:CGContextSetRGBStrokeColor不會繪製邊框

#import "PieChart.h" 


@implementation PieChart 
@synthesize startDeg, endDeg, isSelected, colorNumber; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 


// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 

    int centerX = 120; 
    int centerY = 160; 
    int radius = 94; 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(ctx, 255.0/255.0, 255.0/255.0, 255.0/255.0, 1.0); 
    CGContextSetLineWidth(ctx, 2.0); 

    CGContextSetRGBFillColor(ctx, [self getColorFor:1]/255.0, [self getColorFor:2]/255.0, [self getColorFor:3]/255.0, 1.0); 

    CGContextMoveToPoint(ctx, centerX, centerY); 
    CGContextAddArc(ctx, centerX, centerY, radius, (startDeg)*M_PI/180.0, (endDeg)*M_PI/180.0, 0); 

    CGContextClosePath(ctx); 
    CGContextFillPath(ctx); 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

-(float)getColorFor:(int)rgb { 
    if (colorNumber == 1) { 
     switch (rgb) { 
      case 1: 
       return 232.0; 
       break; 
      case 2: 
       return 96.0; 
       break; 
      case 3: 
       return 104.0; 
       break; 

      default: 
       return 255.0; 
       break; 
     } 
    } 
    if (colorNumber == 2) { 
     switch (rgb) { 
      case 1: 
       return 248.0; 
       break; 
      case 2: 
       return 198.0; 
       break; 
      case 3: 
       return 6.0; 
       break; 

      default: 
       return 255.0; 
       break; 
     } 
    } 

    return 255.0; 
} 

@end 

問題是,邊界永遠不會畫。或者,如果我設法繪製邊界,填充不會在那裏!任何建議如何實現?

這是我如何使用這個類在我的ViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    PieChart *pie1 = [[PieChart alloc] initWithFrame:CGRectMake(10, 10, 300, 400)]; 
    pie1.startDeg = 0; 
    pie1.endDeg = 127; 
    pie1.colorNumber = 1; 
    pie1.backgroundColor = [UIColor clearColor]; 

    PieChart *pie2 = [[PieChart alloc] initWithFrame:CGRectMake(10, 10, 300, 400)]; 
    pie2.startDeg = 127; 
    pie2.endDeg = 360; 
    pie2.colorNumber = 2; 
    pie2.backgroundColor = [UIColor clearColor]; 

    [self.view addSubview:pie1]; 
    [self.view addSubview:pie2]; 
} 

回答

2

與您的代碼的問題是,你只填寫你的路徑,而不是撫摸着它 - 那麼自然邊界正在繪製。您需要替換CGContextFillPath調用

CGContextDrawPath (ctx, kCGPathFillStroke); 
+0

感謝的人解決這個問題!這就像一個魅力;) – dizza213

0

撫摸或填充路徑會清除當前路徑。這就是爲什麼一個人可以工作而不是另一個人(無論你先試一試)。

您可以通過重新加入輕撫你的前路,或使用CGContextDrawPath