gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:59 26 4
gpt4 key购买 nike

问题:

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com