不幸的是,我很难对自己进行测试,因为我还没有得到我自己的魔法鼠标,但是我的测试人员告诉我,他们有一个魔力鼠标,动量滚动在我的应用程序中不起作用。我没有子类化NSScrollView,但scrollview的文档视图都是自定义的。我没有覆盖scrollWheel:在任何地方,但是,但动力显然只是不起作用。我甚至不确定从哪里开始。我以为它只是发送scrollWheel事件,事情会照顾好自己。 (使用滚轮或MBP触控板滚动按预期工作。)显然我必须以某种方式做一些阻止它的事情,但我甚至不知道从哪里开始。想法?
答案 0 :(得分:2)
我在前一段时间就想到了这个问题,问题是在滚动时,我做了很多花哨的视图操作,就像iPhone上的UITableView在屏幕上和屏幕上滚动时添加和删除视图一样。这对于性能来说非常有用 - 但是我进入OSX编程的次数越多,我就越觉得这对OSX来说是错误的(但正确的iPhone理念)。
无论如何,看起来真正发生的事情是,当您执行类似滚轮滚动的操作时,滚动事件将被发送到鼠标光标下的视图,然后它会响应响应者/视图,直到它到达某处处理它。通常情况下这不是问题,但是动态滚动操作系统实际上只是将更小的scrollWheel事件发送到动量开始时光标下的视图。这意味着如果视图在滚动过程中被移除(因为它滚动屏幕或其他东西),它会打破链并且动量停止,因为仍然获得scrollWheel消息的视图不再在视图层次结构中。
“简单”修复是不删除获取最后一个scrollWheel事件的视图 - 即使它在屏幕外。更好的修复(和我使用的那个)是不要尝试使用NSViews,就像它们是UIViews,而只是使用drawRect绘制内容。 :)不仅仅是大约十亿倍的速度,Just Just(tm)还有动量滚动,因为它是OSX期望事情的完成方式。
在我之后重复:OSX不是iPhoneOS ..:P
答案 1 :(得分:1)
如果未设置NSScrollView本身的Line Scroll和Page Scroll属性,则可能会出现奇怪的滚动行为。
除此之外,你只需要一个魔术鼠标 - 很容易说或不:-) - 自己测试或发布自定义视图的整个代码以及包含它的xib。如果没有它,其他人就无法为你提供更多的猜测(如上所述)。