当您使用较新的Apple Magic Mouse鼠标滚动(至少在10.6上,我无法确认任何以前的Mac OS)时,您会像在iPhone上滚动一样进行惯性滚动(也就是说,在轻弹手指滚动后,它不会突然停止,而是逐渐减慢)。对于所有NSScrollViews,这种行为是“免费的”,它会出现。
有一些例外情况,例如Tweetie for Mac(我听说Tweetie是使用自定义Table View类编写的,类似于UITableView
在iPhone上的工作方式)。
我的问题是,滚动视图如何知道如何进行惯性滚动?我的猜测是鼠标[驱动程序]在滚动周期内反复发送具有阻尼滚动幅度(或类似内容)的滚动事件。但我不确定它是如何运作的。
我在我的scrollview类中遇到了一些滚动问题,我正在试图找出原因(显然我们没有Tweetie的源代码,看看为什么它没有得到正确的滚动),但只是尝试更好地了解它是如何工作的,以解决我自己的问题。
答案 0 :(得分:7)
NSScrollView对Magic Mouse一无所知。惯性滚动由重复滚动事件执行。
您可以覆盖NSResponder的-scrollWheel:
方法并使用NSLog查看Magic Mouse滚动与触控板和传统滚动的不同之处。
传统滚动设置deltaX
和deltaY
以指示要滚动的“行”数。
平滑滚动设备(触控板和魔术鼠标)使用deviceDeltaX
和deviceDeltaY
来指示要滚动的像素数。
此外,Magic Mouse使用scrollPhase
来指示惯性滚动的进行时间。
请注意,deviceDeltaX
和deviceDeltaY
是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
获取