NSOutlineView渐变背景

时间:2012-01-09 17:32:00

标签: macos cocoa

我正在尝试使用渐变背景实​​现NSOutlineView子类:

- (void)drawBackgroundInClipRect:(NSRect)clipRect {
    [gradient drawInRect:clipRect angle:90];
}

它几乎可以用于:

但是当我调整视图大小时,渐变“中断”:

除了在项目覆盖的区域之外,所有地方都正确渲染渐变。当我更改窗口的关键状态(通过切换到另一个应用程序)时,该区域也会正确呈现,就像我折叠队列项一样。我错过了什么?调整大小后,我该怎么做才能更新该区域的背景?

3 个答案:

答案 0 :(得分:2)

剪辑矩形是已更改的区域,不一定是渐变的整个区域。如果希望渐变从视图的(可见区域)的顶部开始,并在视图的(可见区域)的底部结束,则需要每次都使用相同的矩形绘制渐变。 / p>

使用the NSRectClip function剪辑到给定的矩形,这将限制您的绘图,然后问自己(大纲视图)your enclosing scroll view,向滚动视图询问{{ 3}},并将滚动视图告诉the visible rect

答案 1 :(得分:1)

我必须迁移到基于视图的NSOutlineView,以下代码与它完美配合:

- (void)drawBackgroundInClipRect:(NSRect)clipRect {
    [gradient drawInRect:self.frame angle:90];
}

答案 2 :(得分:0)

我认为大纲视图不会在大小更改时重绘现有项目,因为通常它不需要。在您的视图中,为NSViewFrameDidChangeNotification添加通知监听器,并在帧更改时在视图上调用-setNeedsDisplay