问题:
我有一个 NSScrollView。我用它来实现一个自定义的“ TableView ”,其中包含实际上是 NSViews 的数据行。 (注意:这不是 NSTableView 的实例。)
当我垂直滚动(没有水平滚动)时,我使用 boundsChanged 通知添加(作为 scrollView 的 contentView 的 subview )变得可见的 NSView(具有与 scrollView 的文档可见矩形相交的框架的那些)并删除那些不再可见的( ScrollView 可见矩形之外的框架。)
除了惯性滚动之外,这个过程非常有效。如果我将光标放在单元格 X 上,然后轻弹触控板以惯性快速向下滚动,单元格 X 会迅速离开可见矩形,并因此从 scrollView 的 contentView 中删除。但是,这会破坏惯性滚动。如果我不将单元格 X 作为 subview 移除,那么惯性滚动将完美运行。
我需要什么:
一种保持惯性滚动的方法,同时仍然删除用户开始滚动手势时光标恰好位于其上的 NSView。
我尝试了什么:
我看过 NSResponder 的方法:
-scrollWheel:(NSEvent *)theEvent
默认实现将 scrollWheel 传递给下一个响应者。因此,我对 NSScrollView 进行了子类化并实现了此方法,以试图阻止它将 scrollWheel 事件传递给 scrollView 的 contentView 内的各个 subview 。没用。
然后我进入我的 NSViews(我要添加到 contentView 的那些)并覆盖 scrollWheel 以将事件传递回 scrollView 本身。没用。
在这两种情况下我仍然会滚动,但不是惯性的。
有什么想法吗?谢谢!
最佳答案
我没有在 Cocoa 中做过这件事,但我可能会考虑简单地回收你的 NSView 对象,一旦它离开可见的矩形,通过删除 它的 subview ,然后将其框架更改为从顶部滚动回可见矩形。
显然,您可以通过简单地更新其框架来做到这一点,而不必将其删除并重新添加到 NSScrollView。
关于objective-c - 惯性滚动和-ScrollWheel : on OS X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158516/