4

问题:

我有一个 NSScrollView。我正在使用它来实现一个自定义的“表格视图”,其中包含实际上是 NSView 的数据行。(注意:这不是 NSTableView 的实例。)

当我垂直滚动(没有水平滚动)时,我使用 boundsChanged 通知添加(作为 scrollView 的 contentView 的子视图)变得可见的 NSView(具有与 scrollView 的文档可见矩形相交的框架)并删除那些不再可见(scrollView 的可见矩形之外的帧。)

除了惯性滚动之外,这个过程非常有效。如果我将光标悬停在单元格 X 上并且我轻拂触控板以惯性快速向下滚动,则单元格 X 会迅速离开可见的矩形,因此会从滚动视图的 contentView 中删除。但是,这会杀死惯性滚动。如果我不将单元格 X 作为子视图删除,则惯性滚动效果很好。

我需要的:

一种保持惯性滚动的方法,同时仍然删除用户开始滚动手势时光标恰好位于顶部的 NSView。

我试过的:

我看过 NSResponder 的方法:

-scrollWheel:(NSEvent *)theEvent 

默认实现将 scrollWheel 传递给下一个响应者。因此,我将 NSScrollView 子类化并实现了此方法,以尝试阻止它将 scrollWheel 事件传递给 scrollView 的 contentView 内的各个子视图。没用。

然后我进入我的 NSViews(我添加到 contentView 的那些)并覆盖 scrollWheel 以将事件传递回 scrollView 本身。没用。

在这两种情况下我仍然会滚动,但不是惯性。

有任何想法吗?谢谢!

4

1 回答 1

0

I haven't done this exact thing in Cocoa, but I'd probably be thinking about simply recycling your NSView object, as soon as its off the visible rect, by removing its subviews, then changing its frame to be in place to scroll back onto the visible rect from the top.

You can obviously do this by simply updating its frame, and avoid having to remove and re-add it to the NSScrollView.

于 2011-08-15T03:49:08.113 回答