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

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的源代码来查看为什么它没有得到正确的滚动),而只是想更好地理解它是如何工作以解决我自己的问题.

Dar*_*ren 7

NSScrollView对Magic Mouse一无所知.通过重复滚动事件来执行惯性滚动.

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

传统滚动设置deltaXdeltaY指示要滚动的"行"数.

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

此外,Magic Mouse用于scrollPhase指示惯性滚动正在进行的时间.

需要注意的是deviceDeltaXdeviceDeltaY是NSEvent的私有方法.