2014-10-22 398 views
-1

對不起,但我對CGContext的瞭解相當有限。無法在CGContext中設置填充顏色(CGContextSetFillColorWithColor)

我使用的是接受的答案HERE中的代碼在UIView中繪製星星。我想要實現的是以2種不同顏色顯示星星(如評分視圖)。問題是,我似乎無法使用CGContextSetFillColorWithColor()的2種不同顏色。

相關代碼:

if (i < 3) { 

    NSLog(@"__BLACK__"); 

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

} else { 

    NSLog(@"__RED__"); 

    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
} 

全碼:

- (void) drawRect:(CGRect)rect { 

    int aSize = 20; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, aSize); 

    CGFloat xCenter = 15.0; 
    CGFloat yCenter = 12.5; 

    float w = 25.0; 
    double r = w/2.0; 
    float flip = -1.0; 

    for (NSUInteger i = 0; i < 5; i++) { 

     if (i < 3) { 

      NSLog(@"__BLACK__"); 

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

     } else { 

      NSLog(@"__RED__"); 

      CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 
      CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
     } 

     double theta = 2.0 * M_PI * (2.0/5.0); // 144 degrees 

     CGContextMoveToPoint(context, xCenter, r * flip + yCenter); 

     for (NSUInteger k = 1; k < 5; k++) { 

      float x = r * sin(k * theta); 
      float y = r * cos(k * theta); 
      CGContextAddLineToPoint(context, x + xCenter, y * flip + yCenter); 
     } 
     xCenter += 37.5; 
    } 

    CGContextClosePath(context); 
    CGContextFillPath(context); 
} 

在編譯和執行我得到的日誌:

__BLACK__ 
__BLACK__ 
__BLACK__ 
__RED__ 
__RED__ 

然而,填充顏色似乎不生效,結果是:

enter image description here

我不明白我在做什麼錯在這裏。

+1

外'for'循環會產生5組星星,後面的星星會覆蓋更早的星星(即1個黑星,然後是2個黑星,第一顆星遮住,然後是3個黑星包含2顆黑星的星星,4顆覆蓋3顆黑星的紅星等)。嘗試改變'for(NSUInteger i = 0; i <5; i ++){'to'for(NSUInteger i = 0; i <2; i ++){'你應該看到黑色星星。 – bobnoble 2014-10-22 11:11:14

+0

@bobnoble,你是對的,部分。我*複製了** for **語句,並將其添加到顯示的代碼後面,並添加了我想要的顏色和減少的迭代次數。有效。你應該發佈這個答案,我會接受它。 – n00bProgrammer 2014-10-22 13:45:33

回答

0

設置上下文的填充顏色時,它將用於該上下文中的每個對象。就你而言,所有5顆星都在相同的環境下繪製,因此只有最後一個顏色設置(紅色)仍然存在。

您可能可以在一個上下文中繪製5個不同的CGPaths,實現您想要實現的目標。