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

问题描述

|| 问题: 我有一个NSScrollView。我使用它来实现自定义\“ Table View \”,其中包含实际上是NSViews的数据行。 (注意:这不是NSTableView的实例。) 当我垂直滚动(没有水平滚动)时,我使用boundsChanged通知添加(作为scrollView \的contentView的子视图)可见的NSView(那些与该scrollView \的文档可见的矩形相交的框架) )并删除不再可见的帧(scrollView的可见矩形之外的帧。) 除涉及惯性滚动外,该过程的运行效果非常好。如果我将光标悬停在单元格X上,然后轻拂触控板以惯性向下快速滚动,则单元格X会迅速离开可见矩形,并因此从scrollView的contentView中删除。但是,这会杀死惯性滚动。如果我不删除单元格X作为子视图,那么惯性滚动会完美工作。 我需要的: 保持惯性滚动的一种方式,同时仍删除用户开始滚动手势时光标恰巧位于其上方的NSView。 我尝试过的内容: 我看了NSResponder的方法
-scrollWheel:(NSEvent *)theEvent 
认实现将scrollWheel传递给下一个响应者。因此,我对NSScrollView进行了子类化,并实现了此方法,以尝试阻止将scrollWheel事件传递给scrollView的contentView内部的各个子View。没用 因此,然后进入我的NSViews(我要添加到contentView的NSViews中),并覆盖scrollWheel将事件传递回scrollView本身。没用 在这两种情况下,我仍然可以滚动,但不能惯性滚动。 有任何想法吗?谢谢!     

解决方法

        我还没有在Cocoa中做完这件事,但是我可能会考虑将NSView对象回收,只要它离开可见区域,就删除它的子视图,然后将其框架更改为从顶部滚动回到可见矩形。 您显然可以通过简单地更新其框架来做到这一点,而不必将其删除并将其重新添加到NSScrollView。