目标 c - 惯性滚动和滚轮:在 OS X 上



问题:

我有一个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中。

相关内容

  • 没有找到相关文章

最新更新