objective-c - 惯性滚动和-ScrollWheel : on OS X

标签 objective-c cocoa scroll nsresponder scrollwheel

问题:

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

相关文章:

ios - Setter、Getter 和暴露真正的核心数据类型,我该怎么做?

javascript - 阻止 ace 编辑器将滚动条集中在光标上?

Emacs:PageUp PageDown 并回到初始位置

objective-c - 设置数组的差异

iphone - SymbolicateCrash 没有创建正确的反符号文件

iphone - 检测全局 UIWindow 对象上的触摸事件

objective-c - 导航 Controller 和泄漏

cocoa - 调用setFrame后如何触发 View 自动布局调整?

macos - 在 Mac 应用程序中显示表情符号图标

css - 如何让设置高度的父包装器中的面板滚动而不同时更改父级的高度