透明的NSImageView落后于NSView

时间:2011-02-13 07:18:02

标签: macos interface-builder nsview nsimageview

我有一个透明的.png图像,它覆盖NSView,它看起来像这样:

enter image description here

然而,有时候,由于没有押韵或理由或迹象表明它会这样做,NSImageView落后于NSView

enter image description here

我不确定如何将NSImageView保持在NSView之上,或者为什么它甚至落后于NSView

以下是Interface Builder中的内容: enter image description here

更新

我尝试了以下相同的结果:

[header removeFromSuperview];
[mainView addSubview:header positioned:NSWindowAbove relativeTo:nil];

实现此效果的更好方法是什么?

3 个答案:

答案 0 :(得分:1)

重叠的Cocoa UI元素具有未定义的绘制顺序,Apple声明不应重叠它们。您可以创建一些自定义绘图代码,以使您当前的设计工作。但是,老实说,我会更改设计,以便与Mac OS X的人机界面指南相匹配。您可以在下面的链接中阅读这些内容。 http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/XHIGIntro.html%23//apple_ref/doc/uid/TP30000894-TP6

答案 1 :(得分:1)

如果在同一级别上有两个重叠的NSView,则未定义绘制顺序。您可以使用SubviewsUsingFunction:context:对子视图的绘图进行排序。您必须提供基于某个值(例如标记)进行比较的比较函数:

NSComparisonResult viewCompareByTag(NSView *firstView, NSView *secondView, void *context) {
    return ([firstView tag] > [secondView tag]) ? NSOrderedAscending : NSOrderedDescending;
}

[mySuperView sortSubviewsUsingFunction:&viewCompareByTag context:nil];

答案 2 :(得分:1)

原来我必须在Interface Builder中重新安排一些视图, 然后在代码中:

[[header layer] setZPosition:1.0f];