どのようにNSScrollView上のマジックマウスと勢い/慣性スクロール動作しますか?
-
13-09-2019 - |
質問
あなたはiPhone(上スクロールのような慣性スクロールを取得する(少なくとも10.6に、私は、任意の以前のMac OSを確認することはできません)つまり、指のフリックは、それをスクロールした後、 )突然停止し、代わりに徐々に減速していません。この動作は、すべてのNSScrollViewsと「自由のために」で、それが表示されます。
Mac用などのTweetieなど例外的な場合があります(私はツイーティがUITableView
は、iPhone上でどのように機能するかに似て動作しますカスタムテーブルビューのクラスで書かれたと聞きました)。
私の質問は、どのようにスクロールビューは、この慣性スクロールを行う方法を知っていますか?私の推測では、[ドライバ]が繰り返しスクロールにわたって湿しスクロール大きさ(またはそのようなもの)で、スクロールイベントを送信するマウスです。しかし、私はそれがどのように動作するか本当にわからない。
私はscrollviewクラスのいくつかのスクロール問題を抱えていると私は(明らかに我々はそれが適切なスクロールを取得していない理由を確認するためにツイーティにソースコードを持っていない)理由を把握しようとしているが、ちょうどしようそれは私自身の問題を解決するために、どのように機能するかをよりよく理解する。
解決
NSScrollViewは、マジックマウスについて何も知りません。慣性スクロールが繰り返しスクロールイベントによって実行されます。
あなたはNSResponderの-scrollWheel:
メソッドをオーバーライドして、マジックマウスのスクロールがトラックパッドや伝統的なスクロールの違いについて見てのNSLogを使用することができます。
伝統的なスクロールがスクロールする「線」の数を示すためにdeltaX
とdeltaY
を設定します。
スムーススクロールデバイス(トラックパッドやマジックマウス)スクロールするピクセルの数を示すためdeviceDeltaX
とdeviceDeltaY
を使用します。
また、マジックマウスの慣性スクロールが進行中であることを示すためにscrollPhase
を使用します。
deviceDeltaX
とdeviceDeltaY
がNSEventのプライベートメソッドであることに注意してください。
他のヒント
を追加、勢いをオプトアウトする@「NO」ユーザデフォルトへのアプリの非常に冒頭に「AppleMomentumScrollSupported」@キーのために(マジックマウス開発のリリースノートを参照してください)。だから、あなたもtweetueのあなたのデフォルトにこのエントリを追加することにより、ツイーティのためにそれを上書きしてしまうことがあります。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
[defaults registerDefaults:appDefaults];
TUIScrollViewのソースコードが利用可能である、ここで https://github.com/twitter/twui の