【问题标题】:Update NSRect Color or Redraw更新 NSRect 颜色或重绘
【发布时间】:2012-02-20 06:24:15
【问题描述】:

我想要做的是拥有一个 NSSlider,每当我更改值时,我希望它更新我的 NSRect 的颜色。每次我想更改颜色时,我是否需要删除我的 NSRect 并重新绘制它,或者我将如何处理?如果我必须删除 Rect 并重新绘制它,我会怎么做?

谢谢!

方法如下

arrowX 只是一个整数,但我想用滑块更改的是[[NSColor colorWithDeviceWhite:0 alpha:0.4] setFill];,特别是 0 到 1 之间的 alpha 值

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

【问题讨论】:

  • 现在向我们展示绘制 NSRect 的方法。是drawRect:吗?
  • 是的,它是drawRect。我用我的代码更新了问题

标签: objective-c xcode macos xcode4 nsrect


【解决方案1】:

您需要添加一个实例变量来存储您的NSColor。在滑块的操作方法中,将实例变量设置为新颜色,并将setNeedsDisplay:YES 发送到视图。

【讨论】:

  • 所以我制作了 NSColor *theColor。我将如何修改当前行 [[NSColor colorWithDeviceWhite:0 alpha:0.4] setFill]; 以仅存储 alpha?或者我该如何重写它?非常感谢!
  • 该行应该是[theColor setFill]。您不存储“仅 alpha”。您正在重绘视图的全部内容。
  • 好的,谢谢!除 setNeedsDisplay 外,一切正常,是否需要在界面生成器中更改或添加到操作中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多