2

不幸的是,这对我来说很难测试自己,因为我还没有自己的 Magic Mouse,但是我的测试人员告诉我,他们确实有一个 Magic Mouse,动量滚动在我的应用程序中不起作用。我没有继承 NSScrollView,但 scrollview 的文档视图都是自定义的。我也没有覆盖 scrollWheel: 任何地方,但是动力显然不起作用。我什至不知道从哪里开始。我认为它只会发送 scrollWheel 事件,事情会自行解决。(使用滚轮或在 MBP 触控板上滚动按预期工作。)显然我必须以某种方式阻止它,但我什至不知道从哪里开始。想法?

4

2 回答 2

3

不久前我发现了这一点,问题是在滚动时,我做了很多花哨的视图操作,有点像在 iPhone 上 UITableView 在屏幕上和屏幕上滚动时添加和删除视图的方式。这对性能很有用——但我越是接触 OSX 编程,我就越意识到这对 OSX 是错误的(但对 iPhone 来说是正确的想法)。

无论如何,看起来,真正发生的事情是,当您执行诸如滚轮滚动之类的操作时,滚动事件被发送到鼠标光标下的视图,然后它在响应者/视图中产生涟漪,直到它到达处理它的地方. 通常这不是问题,但随着动量滚动,操作系统实际上只是将更小的 scrollWheel 事件发送到动量开始时光标下的视图。这意味着如果视图在滚动过程中被删除(因为它滚动到屏幕外或其他东西),它会破坏链并且动量停止,因为仍在获取 scrollWheel 消息的视图不再位于视图层次结构中。

“简单”修复是不删除获得最后一个 scrollWheel 事件的视图 - 即使它不在屏幕上。更好的解决方法(也是我使用的方法)是不要尝试像使用 UIView 那样使用 NSView,而只是使用 drawRect 绘制内容。:) 不仅速度快了大约十亿倍,而且它还可以通过动量滚动来工作(tm),因为这是 OSX 期望的事情。

跟我重复一遍:OSX 不是 iPhoneOS .. :P

于 2010-02-01T16:34:13.447 回答
1

当您不设置 NSScrollView 本身的 Line Scroll 和 Page Scroll 属性时,可能会发生奇怪的滚动行为。

除此之外,您只需获得一个魔术鼠标 - 说起来容易吗:-) - 自己测试或发布自定义视图的整个代码以及包含它的 xib。没有它,其他人无法为您提供更多的猜测(如上述)。

于 2009-12-22T18:38:48.757 回答