Прозрачный NSImageView отстает от NSView
У меня прозрачный .png
изображение, которое лежит над NSView
и это должно выглядеть так:
Однако иногда, без какой-либо рифмы, причины или указания на то, что он собирается это сделать, NSImageView
отстает от NSView
:
Я не уверен, как сохранить NSImageView
выше NSView
или почему он отстает от NSView
,
Вот как это выглядит в Интерфейсном Разработчике:
Обновить:
Я пробовал следующее с такими же результатами:
[header removeFromSuperview];
[mainView addSubview:header positioned:NSWindowAbove relativeTo:nil];
Как лучше достичь этого эффекта?
3 ответа
Элементы какао-интерфейса, которые перекрываются, имеют неопределенный порядок рисования, и Apple заявляет, что вам не следует перекрывать их. Вы можете создать собственный код для рисования, чтобы ваш текущий дизайн работал. Однако, честно говоря, я бы изменил дизайн, чтобы он соответствовал руководящим принципам интерфейса Mac OS X для человека. Вы можете прочитать об этом по ссылке ниже. http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/XHIGIntro.html%23//apple_ref/doc/uid/TP30000894-TP6
Когда у вас есть два перекрывающихся NSView на одном уровне, не определено, каким будет порядок рисования. Вы можете отсортировать рисунок подпредставлений, используя SubviewsUsingFunction:context:
, Вам нужно будет предоставить функцию сравнения, которая сравнивает на основе некоторого значения (например, тега):
NSComparisonResult viewCompareByTag(NSView *firstView, NSView *secondView, void *context) {
return ([firstView tag] > [secondView tag]) ? NSOrderedAscending : NSOrderedDescending;
}
[mySuperView sortSubviewsUsingFunction:&viewCompareByTag context:nil];
Оказывается, мне пришлось переставить некоторые представления в Интерфейсном Разработчике, а затем в коде:
[[header layer] setZPosition:1.0f];