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