どのようにNSScrollView上のマジックマウスと勢い/慣性スクロール動作しますか?

StackOverflow https://stackoverflow.com/questions/1849023

質問

あなたは、新しいアップルマジックマウスでスクロールすると

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

Mac用などのTweetieなど例外的な場合があります(私はツイーティがUITableViewは、iPhone上でどのように機能するかに似て動作しますカスタムテーブルビューのクラスで書かれたと聞きました)。

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

私はscrollviewクラスのいくつかのスクロール問題を抱えていると私は(明らかに我々はそれが適切なスクロールを取得していない理由を確認するためにツイーティにソースコードを持っていない)理由を把握しようとしているが、ちょうどしようそれは私自身の問題を解決するために、どのように機能するかをよりよく理解する。

役に立ちましたか?

解決

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

あなたはNSResponderの-scrollWheel:メソッドをオーバーライドして、マジックマウスのスクロールがトラックパッドや伝統的なスクロールの違いについて見てのNSLogを使用することができます。

伝統的なスクロールがスクロールする「線」の数を示すためにdeltaXdeltaYを設定します。

スムーススクロールデバイス(トラックパッドやマジックマウス)スクロールするピクセルの数を示すためdeviceDeltaXdeviceDeltaYを使用します。

また、マジックマウスの慣性スクロールが進行中であることを示すためにscrollPhaseを使用します。

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

他のヒント

を追加、勢いをオプトアウトする@「NO」ユーザデフォルトへのアプリの非常に冒頭に「AppleMomentumScrollSupported」@キーのために(マジックマウス開発のリリースノートを参照してください)。だから、あなたもtweetueのあなたのデフォルトにこのエントリを追加することにより、ツイーティのためにそれを上書きしてしまうことがあります。

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
 [defaults registerDefaults:appDefaults];

TUIScrollViewのソースコードが利用可能である、ここで https://github.com/twitter/twui

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top