我正在尝试使用渐变背景实现NSOutlineView子类:
- (void)drawBackgroundInClipRect:(NSRect)clipRect {
[gradient drawInRect:clipRect angle:90];
}
它几乎可以用于:
但是当我调整视图大小时,渐变“中断”:
除了在项目覆盖的区域之外,所有地方都正确渲染渐变。当我更改窗口的关键状态(通过切换到另一个应用程序)时,该区域也会正确呈现,就像我折叠队列项一样。我错过了什么?调整大小后,我该怎么做才能更新该区域的背景?
答案 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
。