2011-07-08 4 views
4

アプリケーションにカスタムビューがあり、これはレイヤーバックでNSScrollViewに埋め込まれています。私はユーザーがズームインすることができます(これは、私のカスタムビューのサイズを増やすことによって達成されます)。しかし、NSScrollViewが新しいスクロールポイントをポイントする前に、ビューを(通常はビューの原点に)ジャンプさせ続けるため、任意のポイントでズームインするのに問題があります。 CAScrollLayerを使用したいと思っています。なぜなら、私はそれに合わせてズーミングを正しく行うことができ、スムーズに動かせることが分かっているからです。しかし、スクロール機能はすべて失われてしまいます。スクロールをアニメーション化し、原子的にズームしますか?

CAScrollLayerNSScrollViewに利用する方法はありますか?NSClipViewの可能性がありますか?そうでない場合、CAScrollLayerは実際にどのような目的を果たしますか?別のアプローチで、ビューのサイズとスクロールポイントを原子的に変更してアニメーション化することは可能ですか?

要するに、CAScrollLayerは完全に役に立たないか、ほとんど役に立たないのですか?

更新

私は、ビューの内容を表示するCALayerサブクラスを作ることによって周りにあまりジャンプして、私の内側のビューを得ています。レイアウトの制約でサイジングするのではなく、オーバーライドサイズを-resizeWithOldSuperlayerSize:に設定しました。私はまだフレームサイズと私のビューの原点を同時に変更することはできませんし、滑らかなアニメーションを得る。私が探しているものの感覚を得るには、プレビューで画像を開き、拡大/縮小します。これは、画像の中心を滑らかに拡大します。

答えて

0

制限として、代わりにNSScrollerを使用できます。あなたが好む実装であれば、あなたはCAScrollLayerを使うことができます。

Mac OS Xの一部の(古い)バージョンでは、NSScrollerには、そのビューを含むAppleのプライベートメソッドを呼び出すバグがあることに注意してください。 '_'で始まるメソッドに応答しないカスタムビューについての例外が発生するため、これが発生するかどうかはわかります。

+0

NSScrollerはUIのクロムを提供しませんが、正しいですか?同様の効果を達成するためにどこの例が使用されていますか? OSのバージョンは問題ではありません。ライオン(または、私が出荷する時期によってはマウンテンライオン)を必要とするためです。 – Dov

+0

'NSScroller'はNSScrollerViewが使用するものです。はい、UIのクロムを提供します(スクロールバーの描画を担当するのであれば)。私たちはiDefragでそれを使用しています(ブロックビューはOpenGLを使って実際に描画され、32ビットAppKitの 'float'座標の精度問題のために独自のスクロールを行います)。 – alastair

関連する問題