【问题标题】:Draw NSView background partially, with a gradient部分绘制 NSView 背景,带有渐变
【发布时间】:2012-10-13 08:47:46
【问题描述】:

我有一个 NSView,子类化,带有自定义背景绘图,并用渐变填充它。 在 IB 中,我在其中间的某处放置了一个复选框。

这是 drawRect 方法。

-(void) drawRect:(NSRect)dirtyRect {
    CGFloat sc = 0.9f;
    CGFloat ec = 0.6f;  
    NSColor* startingColor = [NSColor colorWithDeviceRed:sc green:sc blue:sc alpha:1];
    NSColor* endingColor = [NSColor colorWithDeviceRed:ec green:ec blue:ec alpha:1];
    NSGradient *grad = [[NSGradient alloc] initWithStartingColor:startingColor endingColor:endingColor];
    [grad drawInRect:dirtyRect angle:270];
}

发生的情况是,首先调用相同的方法来绘制整个视图区域,然后再绘制 NSButton(复选框)位于其顶部的部分。当然,复选框背景是用完整的渐变绘制的,这是不对的,因为该部分要小得多。我在上述 NSView 上放置的其他控件也会发生同样的情况。

在这种事情上建议的方法是什么?

一种选择是使控件的高度与视图的高度相同,但这会在将来导致问题。

【问题讨论】:

    标签: xcode draw gradient nsview


    【解决方案1】:

    答案是,总是绘制视图的整个区域,而不仅仅是dirtyRect

    [grad drawInRect:[self bounds] angle:270];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多