2012-10-29 1 views
0

간단한 다이어그램을 그려보고 있습니다. 나는 선으로 연결된 사각형을 가지고있다. 라인은 NSBezierPath으로 그려집니다. 내가 그들을 따라갈 수 있도록 라인에 임의의 색상을 사용하고 있습니다. 내 문제는 선이 색을 바꾼다는 것이다.NSBezierPath에서 박탈 된 스트로크

- (void)drawRect:(NSRect)dirtyRect 
{ 
    // Drawing code here. 
    [[NSColor whiteColor] setFill]; 
    NSRectFill(dirtyRect); 

    CGFloat height = 70.0f; 
    CGFloat yOffset = 20.0f; 

    NSRect rect = NSMakeRect(50.0f, 50.0f, 200.0f, height); 

    NSEnumerator *reverseEnumerator = [steps reverseObjectEnumerator]; 

    NSMutableDictionary *rectsByStep = [NSMutableDictionary dictionaryWithCapacity:10]; 

    for(WFGJobStep *step in reverseEnumerator) 
    { 
     [[NSColor redColor] setFill]; 


     [rectsByStep setObject:[NSValue valueWithRect:rect] forKey:[NSNumber numberWithInteger:step.step]]; 

     rect.origin.y += height + yOffset; 

    } 

    reverseEnumerator = [steps reverseObjectEnumerator]; 
    for(WFGJobStep *step in reverseEnumerator) 
    { 
     NSRect stepRect = [[rectsByStep objectForKey:[NSNumber numberWithInteger:step.step]] rectValue]; 
     NSPoint startPoint = NSMakePoint(stepRect.origin.x + stepRect.size.width, stepRect.origin.y); 

     // draw lines 
     for(NSNumber *stepNumber in step.nextSteps) 
     { 

     // 
     // 
     // Line drawing code here 
     // 
     // 

      NSBezierPath * path = [NSBezierPath bezierPath]; 
      [path setLineWidth: 4]; 

      NSRect targetStepRect = [[rectsByStep objectForKey:stepNumber] rectValue]; 
      NSPoint endPoint = NSMakePoint(targetStepRect.origin.x + targetStepRect.size.width, targetStepRect.origin.y + targetStepRect.size.height); 

      [path moveToPoint:startPoint]; 

      CGFloat controlX = (startPoint.y - endPoint.y) * .2 + stepRect.origin.x + stepRect.size.width + 20; 

      [path curveToPoint:endPoint controlPoint1:NSMakePoint(controlX, startPoint.y) controlPoint2:NSMakePoint(controlX, endPoint.y)]; 

      NSRect square = NSMakeRect(endPoint.x, endPoint.y, 9, 9); 
      [path appendBezierPathWithOvalInRect: square]; 

      [[self randomColor] set]; 
      [path stroke]; 
     } 
    } 
} 

- (NSColor *)randomColor { 
    float c[4]; 

    c[0] = (arc4random()/RAND_MAX) * 1; 
    c[1] = (arc4random()/RAND_MAX) * 1; 
    c[2] = (arc4random()/RAND_MAX) * 1; 
    c[3] = 1.0f; 

    return [NSColor colorWithDeviceRed:c[0] green:c[1] blue:c[2] alpha:c[3]]; 
} 
+0

젠드 - 기본 WWDC 코코아 그래픽 세션 중 하나에서 비슷한 비슷한 것이 있었지만 더 이상 관련 세션을 추적 할 수 없습니다. NSView를 불투명하게 표시 했습니까? – Jay

+0

isOpaque 메서드를 재정의하고 예를 반환했습니다. 같은 결과. – Brian

답변

2

내 문제는이이 scoll보기 때문이다 :

는 출력 - -

enter image description here

코드는 오직 선을 그립니다 그래서 사각형을 그릴 라인을 제거 이것은 첫 번째 NSScrollView입니다. 나는 뷰가 스크롤 할 때 서브 뷰를 다시 그려 넣는다는 것을 알지 못했다. 문제는 스트로크에 임의의 색상을 사용하여 스크롤 할 때 선의 색상이 무작위로 변경된다는 것입니다.