如何与Magic Mouse鼠标上NSScrollView动量/惯性滚动工作?
-
13-09-2019 - |
题
当您使用较新的Apple Magic Mouse鼠标滚动(至少在10.6,我不能确认任何以前的Mac OS),你得到的惯性卷轴滚动一样在iPhone上(也就是手指轻弹后滚动,它不会突然停止,而是逐渐变慢)。此行为是“免费”的所有NSScrollViews,它会出现。
有特殊情况,如特威特为Mac(我听说特威特写与工作类似于UITableView
如何工作在iPhone上的自定义表视图类)。
我的问题是,如何滚动视图知道如何做到这一点惯性滚动?我的猜测是鼠标[司机]重复发送滚动事件,使用润版滚动幅度(或类似的东西),在滚动周期。但我真的不知道它是如何工作的。
我有我的滚动视图类中的一些问题,滚动,我试图找出为什么(很明显,我们没有在源代码必须特威特,看看它为什么没有得到正确的滚动),但只是想以便更好地了解它是如何工作,以解决我自己的问题。
解决方案
NSScrollView不知道魔术鼠标什么。所述惯性滚动是通过反复滚动事件进行。
您可以覆盖NSResponder类的-scrollWheel:
方法和使用的NSLog看魔术鼠标滚动触控板,从传统的滚动的区别。
传统滚动集deltaX
和deltaY
指示的“行”的个数中滚动。
平滑滚动设备(轨迹板和魔术鼠标)使用deviceDeltaX
和deviceDeltaY
指示的像素的数量来滚动。
此外,魔术鼠标使用scrollPhase
以指示何时惯性滚动正在进行中。
请注意deviceDeltaX
和deviceDeltaY
是NSEvent的私有方法。
其他提示
要退出的势头,加上@“NO”为重点@“AppleMomentumScrollSupported”在你的应用程序给用户默认的开始(见的Magic Mouse开发者发行说明)。所以,你也可以将此项添加到您的tweetue的默认覆盖它的Tweetie。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
[defaults registerDefaults:appDefaults];
有TUIScrollView的源代码可在这里 https://github.com/twitter/twui