【问题标题】:Magic Mouse Momentum Scrolling Not Working魔术鼠标动量滚动不起作用
【发布时间】:2010-12-29 05:11:28
【问题描述】:

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

【问题讨论】:

  • 获得魔术鼠标。您希望如何为无法用于测试的设备开发应用程序?
  • 谢谢.. 说起来容易做起来难,因为 100 多英里没有 Apple 商店,而且本周圣诞节即将到来。 :)

标签: cocoa nsscrollview magic-mouse


【解决方案1】:

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

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

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

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

【讨论】:

  • 肖恩,感谢您的见解。非常有帮助。你对根本原因是对的......我已经为桌面实现了一个类似于 UITableView 的视图,并且从层次结构中删除了“单元格”视图导致了这个问题。但是,我不同意这对桌面来说是一个糟糕的策略。在阅读了您上面的帖子后,我找到了一个简单的解决方法:不要从其超级视图中删除即将被重用的视图。只需调整大小/重新定位它。然后删除那些不重复使用的。问题解决了。在这里看到的行动:tod.nu/listview
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多