2011-10-25 9 views
2

私は雑誌のページをレイアウトするアプリを持っています。このアプリケーションは、NSViewのマガジン(NSScrollViewのcontentView)であるMasterPageというマガジンのページ(NSViewというクラスのNSView)をレイアウトします。スクロールビューのページグリッドを考えてみましょう。NSView:スーパービューから別のNSViewにサブビューをドラッグ

「ページ」に広告(クラス=広告)を表すサブビューが自動的に配置されます。私はスーパービュー(ページクラスのNSView)とMasterPageのサブビュー(他のページクラスビュー)の間でこれらの広告をドラッグできるようにしたいと思います。

広告クラスNSViewをPageクラスNSViewにドラッグすると、最初に配置されたNSViewがmouseDraggedメソッドを呼び出すことができますが、広告クラスのサブビューをスーパービューから「解放」して別のNSViewにドラッグするにはどうすればよいですか?

うまくいけばうまくいきました。

答えて

0

ドラッグイベントを開始するときは、スーパービューからドラッグビューを削除し、NSWindowcontentViewに追加します。それをウィンドウ全体にドラッグすることができます。ドラッグイベントが完了したら、hitTest:を使用して、上にあるビューを特定します(本当に必要なビューを見つけるためにスーパービュー階層をバックアップする必要があります)。次に、ドラッグ・ビューを最終ターゲットに戻します。

ビューでクリッピングをどのように実装したかによって、ドラッグビューをcontentViewに移動する手順をスキップすることができます。ページビューをクリップしないと、ドラッグビューが画面全体に移動しても問題ありません。

+0

ありがとう、私はその方向に行っていた。私はそれをスーパービューとcontentViewに出すことができますが、ドラッグは無効になります – PruitIgoe

+0

これはうまくいくとは思えませんが、試したことはありません。ビューの階層から削除されているビューは、ドラッグする機械を台無しにしているからです。この場合、ビューをそのままにしておくことをお勧めしますが、ドラッグ中に空白として再描画し、正常に終了したらビューを完了することをお勧めします。 –

+0

mouseDown、mouseMoved、mouseUpを手動で追跡する必要があります。私がこれをしてからしばらくしている。 Joshuaのところでは、ビューをビットマップにレンダリングし、ビューを非表示にしてビットマップをドラッグすることができます。これは、パフォーマンスと効果を適用する上で効果的です(ドラッグアンドドロップが一般的にどのように実装されているか)。 –

関連する問題