3

当您使用较新的 Apple Magic Mouse 滚动时(至少在 10.6 上,我无法确认任何以前的 Mac OS),您会像在 iPhone 上滚动一样获得惯性滚动(也就是说,在轻弹手指滚动后,它不会突然停止,而是逐渐减速)。这种行为对于所有 NSScrollViews 都是“免费的”,它会出现。

有一些例外情况,例如 Mac 版 Tweetie(我听说 Tweetie 是用自定义的 Table View 类编写的,其工作方式类似于UITableViewiPhone 上的工作方式)。

我的问题是,滚动视图如何知道如何进行这种惯性滚动?我的猜测是鼠标 [驱动程序] 在滚动期间重复发送具有抑制滚动幅度(或类似的东西)的滚动事件。但我不确定它是如何工作的。

我在我的滚动视图类中遇到了一些滚动问题,我试图找出原因(显然我们没有 Tweetie 的源代码来查看为什么它没有得到正确的滚动),但只是想更好地理解它如何工作以解决我自己的问题。

4

3 回答 3

7

NSScrollView 对魔术鼠标一无所知。惯性滚动是通过重复滚动事件来执行的。

您可以覆盖 NSResponder 的-scrollWheel:方法并使用 NSLog 来查看 Magic Mouse 滚动与触控板和传统滚动的不同之处。

传统的滚动设置deltaXdeltaY指示要滚动的“行”数。

平滑滚动设备(触控板和魔术鼠标)使用deviceDeltaXdeviceDeltaY来指示要滚动的像素数。

此外,Magic Mouse 用于scrollPhase指示何时进行惯性滚动。

注意deviceDeltaXdeviceDeltaY是 NSEvent 的私有方法。

于 2009-12-04T21:49:59.817 回答
1

要退出动量,请在您的应用程序开头将 @"AppleMomentumScrollSupported" 键的 @"NO" 添加到用户默认值(请参阅 Magic Mouse 开发人员发行说明)。因此,您还可以通过将此条目添加到您的默认推文来覆盖 Tweetie。

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
 [defaults registerDefaults:appDefaults];
于 2010-05-04T09:04:17.970 回答
0

TUIScrollView 的源代码可在此处获得https://github.com/twitter/twui

于 2011-12-10T18:09:29.710 回答