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]];
}
젠드 - 기본 WWDC 코코아 그래픽 세션 중 하나에서 비슷한 비슷한 것이 있었지만 더 이상 관련 세션을 추적 할 수 없습니다. NSView를 불투명하게 표시 했습니까? – Jay
isOpaque 메서드를 재정의하고 예를 반환했습니다. 같은 결과. – Brian