2011-10-25 75 views
2

我有一個應用程序,爲一本雜誌的頁面。該應用程序在名爲MasterPage的NSView(其本身就是NSScrollView的contentView)中放置了一本雜誌的頁面(名爲Page的一個類的NSView)。考慮滾動視圖中的頁面網格。NSView:從超級景觀拖到子視圖到另一個NSView

然後,「頁面」自動放置子視圖,代表廣告(class = Ad)。我希望能夠將這些廣告拖到他們的超級視圖(頁面類的NSView)中以及MasterPage的子視圖(其他頁面類視圖)之間。

我可以拖動Page類廣告類的NSView的NSView它最初被放置在由調用的mouseDragged方法,但我怎麼能在上海華「釋放」廣告類子視圖,並將其拖動到另一個的NSView?

希望這是有道理的。

回答

0

當您開始拖動事件時,從其超級視圖中刪除拖動視圖,並將其添加到NSWindowcontentView。然後可以將它拖到整個窗口周圍。當拖動事件完成時,使用hitTest:來確定您在哪個視圖之上(您可能必須沿着超級視圖層次結構查找您真正想要的視圖)。然後將拖動視圖添加回最終目標。

根據您在視圖中執行剪切的方式,您可以跳過將拖動視圖移動到contentView的步驟。如果您不剪切頁面視圖,則拖動視圖可以在整個屏幕上移動。

+0

感謝羅布,我正朝着這個方向前進。我可以將它從超級視圖中移出並進入contentView,但拖動變爲禁用 – PruitIgoe

+0

我不確定這會起作用(但我從未嘗試過)。我懷疑這是因爲從視圖層次中刪除的視圖正在搞砸拖機。在這種情況下,我建議將視圖留在原地,但在「拖動」時將其重繪爲空白,並且只有在成功拖放後才能完成視圖移動。 –

+0

您可能需要手動跟蹤mouseDown,mouseMoved和mouseUp。自從我這樣做以來已經有一段時間了。對Joshua而言,您可能想要將視圖渲染爲位圖,隱藏視圖並拖動位圖。這對於性能和應用效果來說可能很好(這是通常實施拖放的方式)。 –