2

残念ながら、自分自身の Magic Mouse をまだ入手していないため、これを自分でテストするのは困難ですが、Magic Mouse を持っているテスターから、私のアプリではモーメンタム スクロールが機能しないと言われました。NSScrollView をサブクラス化していませんが、scrollview のドキュメント ビューはすべてカスタムです。私は scrollWheel: どこでもオーバーライドしていませんが、それでも勢いは明らかに機能していません。どこから始めればよいかさえわかりません。scrollWheel イベントを送信するだけで、物事は自然に処理されると思いました。(ホイールまたは MBP トラックパッドでのスクロールは期待どおりに機能します。) 明らかに、それを止める何かをしているに違いありませんが、どこから始めればよいかさえわかりません。考え?

4

2 に答える 2

3

少し前にこれを理解しましたが、問題は、スクロール時に、iPhone で UITableView が画面をオンまたはオフにスクロールするときにビューを追加および削除する方法のように、多くの派手なビュー操作を行っていたことです。これはパフォーマンスの面ではうまく機能しましたが、OSX プログラミングに取り掛かるほど、これが OSX にとって間違っていることに気付きました (ただし、iPhone の正しい考えです)。

とにかく、実際に起こっていることは、ホイールスクロールのようなことをすると、スクロールイベントがマウスカーソルの下にあるビューに送信され、それを処理する場所に到達するまでレスポンダー/ビューに波及するということです. 通常、これは問題ではありませんが、OS はモーメンタム スクロールを使用すると、モーメンタムが開始されたときにカーソルの下にあったビューに、より小さな scrollWheel イベントを送信するだけです。つまり、スクロール中にビューが削除された場合 (画面外にスクロールするなどの理由で)、スクロールホイール メッセージをまだ取得しているビューがビュー階層に存在しなくなるため、チェーンが壊れて勢いが止まります。

「簡単な」修正は、最後の scrollWheel イベントを取得したビューを削除しないことです-画面外であっても。より良い修正 (および私が行った修正) は、UIView のように NSView を使用しようとせず、代わりに drawRect を使用してコンテンツを描画することです。:) それは約 10 億倍高速であるだけでなく、OSX が期待する動作であるため、モーメンタム スクロールで Just Works(tm) です。

私の後に繰り返してください: OSX は iPhoneOS ではありません.. :P

于 2010-02-01T16:34:13.447 に答える
1

NSScrollView自体のLineScrollプロパティとPageScrollプロパティを設定しないと、奇妙なスクロール動作が発生する可能性があります。

それを超えると、これを自分でテストするか、カスタムビューのコード全体とそれを含むxibを投稿するために、MagicMouseを入手する必要があります。それなしで他の人が(上記のように)推測以上のものをあなたに提供できる方法はありません。

于 2009-12-22T18:38:48.757 に答える