3

新しいApple Magic Mouseでスクロールすると(少なくとも10.6では、以前のMac OSは確認できません)、iPhoneでのスクロールのように慣性スクロールが得られます(つまり、指でフリックしてスクロールした後、スクロールしません)突然停止しますが、代わりに徐々に減速します)。この動作は、すべての NSScrollViews で「無料」であり、表示されます。

Mac 用の Tweetie など、例外的なケースもあります (Tweetie はUITableView、iPhone での動作と同じように動作するカスタム Table View クラスを使用して記述されていると聞きました)。

私の質問は、スクロールビューがこの慣性スクロールを行う方法をどのように知っているのですか? 私の推測では、マウス [ドライバー] は、スクロール期間中に減衰するスクロールの大きさ (またはそのようなもの) でスクロール イベントを繰り返し送信します。しかし、それがどのように機能するかはよくわかりません。

スクロールビュー クラスでスクロールの問題が発生しており、その理由を突き止めようとしています (明らかに、Tweetie のソース コードがなく、適切なスクロールが得られない理由を確認できません)。私自身の問題を解決するためにどのように機能するか。

4

3 に答える 3

7

NSScrollView は Magic Mouse について何も知りません。慣性スクロールは、繰り返しスクロール イベントによって実行されます。

NSResponder の-scrollWheel:メソッドをオーバーライドし、NSLog を使用して、Magic Mouse のスクロールがトラックパッドや従来のスクロールとどのように異なるかを確認できます。

従来のスクロール セットdeltaXと、スクロールdeltaYする「行」の数を示します。

スムーズ スクロール デバイス (トラックパッドと Magic Mouse) では、 と を使用deviceDeltaXdeviceDeltaYて、スクロールするピクセル数を示します。

さらに、Magic Mouse はscrollPhase、慣性スクロールが進行中であることを示すために を使用します。

deviceDeltaXdeviceDeltaYは NSEvent のプライベート メソッドであることに注意してください。

于 2009-12-04T21:49:59.817 に答える
1

モメンタムをオプトアウトするには、アプリの最初の部分にあるキー @"AppleMomentumScrollSupported" に @"NO" をユーザーの既定値に追加します (Magic Mouse 開発者のリリース ノートを参照)。したがって、このエントリを tweetue のデフォルトに追加することで、Tweetie 用にオーバーライドすることもできます。

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
 [defaults registerDefaults:appDefaults];
于 2010-05-04T09:04:17.970 に答える
0

TUIScrollViewのソースコードはこちらから入手できますhttps://github.com/twitter/twui

于 2011-12-10T18:09:29.710 に答える