如何将NSImageView带到另一个NSImageView的前面或后面?

时间:2012-06-20 00:35:38

标签: objective-c cocoa nstableview foreground nsimageview

我有一个NSTableView,它拥有我所有NSImageView的名称,并且根据添加NSImageViews的顺序,最后一个将在前面。

但是在我希望用户能够将NSImageViews放在另一个用户面前的情况下,我该怎么做?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如NSView参考页面所述,视图的子视图的z顺序由视图的subviews数组中的oder给出。您可以使用-addSubview:positioned:relativeTo:插入相对于其他子视图的新子视图,并且可以通过获取subviews属性,根据需要重新排序其中的视图,然后调用-setSubviews:来重新排序现有子视图设置新订单。

具体来说,文档说:

  

子视图的顺序可以被视为从后到前,   但这并不意味着无效和绘画行为。

答案 1 :(得分:1)

我想,你要问的是如何控制视图的z顺序。

由于历史性能原因,这在AppKit中得不到很好的支持(与iOS中的UIKit不同),因为直到最近,你才能真正拥有重叠的兄弟视图。

对此(在最近的OS X版本中)的一种常见方法是使用核心动画(特别是CALayer),它本身支持z排序,但这可能是你所需要的(或在任何事件都会为你带来学习曲线。)

你到底想要做什么?这些图像(图像视图)是否恰好相互叠加?如果是这样,那么最简单(效果更好)的方法就是拥有一个NSImageView并向其发送-setImage:...来更改显示的图像。