2012-02-20 2 views
0

NSSlider를 가지고 있고 값을 변경할 때마다 NSRect의 색을 업데이트하고 싶습니다. NSRect를 제거하고 색을 바꿀 때마다 다시 그릴 필요가 있습니까? 아니면 어떻게해야합니까? Rect를 제거하고 다시 그려야한다면 어떻게 할 수 있습니까?업데이트 NSRect 색 또는 다시 그리기

감사합니다.

은을 heres 방법

arrowX는 정수하지만 나는 슬라이더를 변경하고자하면 인스턴스 변수를 추가 할 필요가 0

- (void)drawRect:(NSRect)theRect 
{ 
    NSRect contentRect = NSInsetRect([self bounds], 0, 0); 
    NSBezierPath *path = [NSBezierPath bezierPath]; 

    [path moveToPoint:NSMakePoint(_arrowX, NSMaxY(contentRect))]; 
    [path lineToPoint:NSMakePoint(_arrowX/2, NSMaxY(contentRect))]; 
    [path lineToPoint:NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect))]; 

    NSPoint topRightCorner = NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect)); 
    [path curveToPoint:NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect)) 
     controlPoint1:topRightCorner controlPoint2:topRightCorner]; 

    [path lineToPoint:NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect))]; 

    NSPoint bottomRightCorner = NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect)); 
    [path curveToPoint:NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect)) 
     controlPoint1:bottomRightCorner controlPoint2:bottomRightCorner]; 

    [path lineToPoint:NSMakePoint(NSMinX(contentRect), NSMinY(contentRect))]; 

    [path curveToPoint:NSMakePoint(NSMinX(contentRect), NSMinY(contentRect)) 
     controlPoint1:contentRect.origin controlPoint2:contentRect.origin]; 

    [path lineToPoint:NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect))]; 

    NSPoint topLeftCorner = NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect)); 
    [path curveToPoint:NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect)) 
     controlPoint1:topLeftCorner controlPoint2:topLeftCorner]; 

    [path lineToPoint:NSMakePoint(_arrowX/2, NSMaxY(contentRect))]; 
    [path closePath]; 

    //SETTING THE VALUE OF 1 = WHITE AND 0 = BLACK. 
    [[NSColor colorWithDeviceWhite:0 alpha:0.4] setFill]; 
    [path fill]; 

    [NSGraphicsContext saveGraphicsState]; 

    NSBezierPath *clip = [NSBezierPath bezierPathWithRect:[self bounds]]; 
    [clip appendBezierPath:path]; 
    [clip addClip]; 

    [NSGraphicsContext restoreGraphicsState]; 
} 
+0

이제 NSRect를 그리는 방법을 보여줍니다. 그것은'drawRect :'입니까? –

+0

예 drawRect입니다. 내 코드 –

답변

0

1 사이의 [[NSColor colorWithDeviceWhite:0 alpha:0.4] setFill]; 특히 알파 값입니다 귀하의 NSColor을 저장합니다. 슬라이더의 작업 방법에서 인스턴스 변수를 새 색상으로 설정하고 setNeedsDisplay:YES을보기로 보냅니다.

+0

로 질문을 업데이트하여 NSColor * theColor를 만들었습니다. 어떻게 현재의 라인을 수정하겠습니까? [[NSColor colorWithDeviceWhite : 0 alpha : 0.4] setFill];'알파 만 저장 하시겠습니까? 또는 어떻게 그것을 다시 작성합니까? 정말 고마워! –

+0

줄은'[theColor setFill]'이어야합니다. "알파 만"저장하지 마십시오. 보기의 전체 내용을 다시 그립니다. –

+0

감사합니다! 모든 것은 setNeedsDisplay를 제외하고 작동합니다. 인터페이스 빌더에서 변경하거나 조치에 추가해야하는 것이 있습니까? –