惯性滚动& -ScrollWheel:在OS X上

时间:2011-05-27 23:11:29

标签: objective-c cocoa scroll nsresponder scrollwheel

问题:

我有一个NSScrollView。我正在使用它来实现一个自定义的“表视图”,其中包含实际为NSView的数据行。 (注意:这不是NSTableView的实例。)

当我垂直滚动(没有水平滚动)时,我使用boundsChanged通知添加(作为scrollView的contentView的子视图)可见的NSView(具有与scrollView的文档可见矩形相交的框架的那些)和删除那些不再可见的内容(scrollView的可见矩形之外的框架。)

除了惯性滚动之外,这个过程非常有效。如果我将光标放在单元格X上,然后轻触触控板以向下向下滚动FAST惯性,单元格X快速离开可见的矩形,并因此从scrollView的contentView中删除。但是,它会杀死惯性滚动。如果我不将单元格X作为子视图删除,则惯性滚动可以完美地运行。

我需要什么:

一种保持惯性滚动的方法,同时仍然删除当用户开始滚动手势时光标碰巧出现的NSView。

我做了什么:

我看过NSResponder的方法:

-scrollWheel:(NSEvent *)theEvent 

默认实现将scrollWheel传递给下一个响应者。因此,我将NSScrollView子类化并实现此方法以尝试阻止它将scrollWheel事件传递给scrollView的contentView中的各个子视图。没工作。

然后我进入我的NSViews(我将添加到contentView中)并覆盖scrollWheel以将事件传递回scrollView本身。没工作。

我仍然在两种情况下滚动,但没有惯性。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我还没有在Cocoa中做过这件事,但我可能只想通过删除子视图来回收你的NSView对象,只要它离开可见的矩形,然后将其框架更改为适当位置以从顶部向后滚动到可见的矩形。

显然,您可以通过简单地更新其框架来实现此目的,并避免将其删除并重新添加到NSScrollView。