2014-10-22 1 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); 
} 

전체 코드 :

__BLACK__ 
__BLACK__ 
__BLACK__ 
__RED__ 
__RED__ 

그러나, 채우기 색상이되어 있지 않은 것 같습니다 : 컴파일 및 실행에

- (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); 
} 

내가 로그를 얻을 결과는 다음과 같습니다.

enter image description here

내가 여기서 잘못하고있는 것을 이해하지 못합니다.

+1

외부 'for' 루프는 5 세트의 별을 만들고, 이전 세트를 덮는 별 세트를 만듭니다 (즉, 1 개의 검은 별, 첫 번째 별이 위로 검은 색 별 2 개 그리고 검은 색 3 개 2 개의 검은 별을 덮고있는 별, 그리고 3 개의 검은 별을 덮고있는 4 개의 빨간 별 등). '(NSUInteger i = 0; i <5; i ++) {'를'(NSUInteger i = 0; i <2; i ++) {'로 바꾸면 검정색 별이 보일 것입니다. – bobnoble

+0

@bobnoble, 당신은 옳았습니다. * ** for ** 문을 복제하고 표시된 코드 뒤에 원하는 색상과 반복 횟수를 추가했습니다. 그것은 효과가 있었다. 이 질문을 답으로 게시해야하며 동의 할 것입니다. – n00bProgrammer

답변

0

컨텍스트에 채우기 색을 설정하면 해당 컨텍스트의 모든 개체에 사용됩니다. 귀하의 경우 모든 5 개의 별이 동일한 문맥 안에 그려 지므로 마지막 색상 설정 (빨간색) 만 유지됩니다.

아마도 한 가지 상황에서 5 가지 CGPath를 사용하여 달성하고자하는 목표를 달성 할 수 있습니다.

관련 문제