我有一个透明的.png
图像,它覆盖NSView
,它看起来像这样:
然而,有时候,由于没有押韵或理由或迹象表明它会这样做,NSImageView
落后于NSView
:
我不确定如何将NSImageView
保持在NSView
之上,或者为什么它甚至落后于NSView
。
以下是Interface Builder中的内容:
我尝试了以下相同的结果:
[header removeFromSuperview];
[mainView addSubview:header positioned:NSWindowAbove relativeTo:nil];
实现此效果的更好方法是什么?
答案 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];