问题:
我有一个NSCrollView。我用它来实现一个自定义的"表视图",其中的数据行实际上是NSViews。(注意:这不是NSTableView的实例。)
当我垂直滚动(没有水平滚动)时,我使用boundsChanged通知来添加(作为scrollView内容视图的子视图)变为可见的NSView(具有与scrollView文档可见矩形相交的框架的NSView),并删除不再可见的NSViews(scrollView可见矩形之外的框架)
除了惯性滚动之外,这个过程非常有效。如果我将光标放在单元格X上,并轻弹轨迹板以惯性快速向下滚动,则单元格X会迅速离开可见矩形,因此,它会从滚动视图的contentView中删除。但是,这会扼杀惯性滚动。如果我不删除单元格X作为子视图,那么惯性滚动工作得很好。
我需要什么:
一种保持惯性滚动的方法,同时仍然删除用户开始滚动手势时光标恰好位于其顶部的NSView。
我尝试了什么:
我看过NSResponder的方法:
-scrollWheel:(NSEvent *)theEvent
默认实现将scrollWheel传递给下一个响应程序。因此,我对NSScrollView进行了子类化,并实现了这个方法,试图阻止它将scrollWheel事件传递给scrollView的contentView中的各个子视图。没用。
然后我进入我的NSViews(我正在添加到contentView中的那些),并重写scrollWheel,将事件传递回scrollView本身。没用。
在这两种情况下,我仍然可以滚动,但不是惯性滚动。
有什么想法吗?谢谢
我在Cocoa中还没有做过这件事,但我可能会考虑简单地回收NSView对象,只要它离开可见矩形,删除的子视图,然后将其框架更改为适当的位置,从顶部滚动回可见矩形。
很明显,您可以通过简单地更新其框架来做到这一点,并避免必须将其删除并重新添加到NSCrollView中。