动量/惯性滚动如何与NSScrollView上的Magic Mouse一起使用?

时间:2009-12-04 19:06:16

标签: cocoa scroll nsscrollview magic-mouse momentum

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

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

我的问题是,滚动视图如何知道如何进行惯性滚动?我的猜测是鼠标[驱动程序]在滚动周期内反复发送具有阻尼滚动幅度(或类似内容)的滚动事件。但我不确定它是如何运作的。

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

3 个答案:

答案 0 :(得分:7)

NSScrollView对Magic Mouse一无所知。惯性滚动由重复滚动事件执行。

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

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

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

此外,Magic Mouse使用scrollPhase来指示惯性滚动的进行时间。

请注意,deviceDeltaXdeviceDeltaY是NSEvent的私有方法。

答案 1 :(得分:1)

选择退出动力,在应用程序的最开始将Key @“AppleMomentumScrollSupported”添加@“NO”到用户默认值(请参阅Magic Mouse Developer发行说明)。因此,您可以通过将此条目添加到默认的tweetue来覆盖Tweetie。

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
 [defaults registerDefaults:appDefaults];

答案 2 :(得分:0)

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

获取