Прозрачный 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];
Другие вопросы по тегам