我正在尝试使用渐变背景实现NSOutlineView子类:
- (void)drawBackgroundInClipRect:(NSRect)clipRect { [gradient drawInRect:clipRect angle:90]; }
它几乎可以用于:
但是当我调整视图大小时,渐变“中断”:
除了在项目覆盖的区域之外,所有地方都会正确渲染渐变.当我更改窗口的关键状态(通过切换到另一个应用程序)时,该区域也会正确呈现,就像我折叠队列项一样.我错过了什么?调整大小后,我该怎么做才能更新该区域的背景?
解决方法
剪辑矩形是已更改的区域,不一定是渐变的整个区域.如果希望渐变从视图的(可见区域)的顶部开始,并在视图的(可见区域)的底部结束,则需要每次都使用相同的矩形绘制渐变.
使用the NSRectClip
function剪辑到给定的矩形,这将限制你的绘图,然后问自己(大纲视图)your enclosing scroll view,询问滚动视图the visible rect,并告诉滚动视图到convert that rect to the outline view’s coordinate system.