2011-10-25 37 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而言,您可能想要将视图渲染为位图,隐藏视图并拖动位图。这对于性能和应用效果来说可能很好(这是通常实施拖放的方式)。 –