Работа с IKImageBrowserView на основе слоя, Z-упорядочением и другими проблемами
Я работаю над проектом, который должен:
- иметь анимацию перехода от представления, которое содержит IKImageBrowserView к другому представлению;
- наведите указатель мыши на каждую ячейку IKImageBrowserCell при перемещении мыши по представлению; а также
- иметь NSView перекрывать часть представления браузера изображения
У меня есть следующие проблемы:
- IKImageBrowserView не соблюдает z-порядок, если он не поддерживается на уровне слоев -> IKImageBrowserView остается на вершине, независимо от того, находится ли вид поверх него (или в этом отношении)
- Если представление браузера изображений является слоистым, проблема с z-упорядочением решается, но пользовательское поведение в IKImageBrowserView разрывается (например, при наведении курсора) -> В Mac 10.7, например, слой выбора и уровень переднего плана ячейки браузера не двигайтесь с изображением в зоне "отскока" вида прокрутки.
Мне нужна поддержка слоев, чтобы сделать анимацию перехода.
Из соображений производительности я знаю, что Apple не советует братьям и сестрам перекрывать друг друга. Однако есть случаи, когда этого нельзя избежать.
Я сообщил об этом в службу технической поддержки Apple. Они передали это инженерам, но они также посоветовали мне представить отчет об ошибке.
Кто-нибудь сталкивался с этим раньше, и если да, то какой обходной путь вы использовали?
Для тех, кому интересно, пример проекта находится здесь https://github.com/jdbenito/nerdery. В делегате приложения попробуйте комментировать / раскомментировать строку -setWantsLayer:.
IKImageBrowserView начинает демонстрировать странное поведение, когда его поддерживают на уровне слоев. И симптомы различаются в зависимости от ОС (например, в Mac OS 10.6 наведения работают до тех пор, пока вы не переключитесь на другую вкладку и не вернетесь обратно к IKImageBrowserView. В Mac OS 10.8 слои наведения не могут отображаться в правильной ячейке),
1 ответ
Родные братья NSView определенно могут перекрываться. У меня был тот же вопрос некоторое время назад, и я получил подтверждение от некоторых инженеров Apple: разрешено ли дублирование дочерних элементов NSView?
О IKImageBrowserView: у меня сложилось впечатление, что он более или менее предназначен для использования в качестве "черного ящика", во многом как UITableView на iOS: вы можете настроить ячейки и некоторые варианты поведения, но вам лучше не связываться с его внутренняя иерархия представлений путем добавления подпредставлений непосредственно к ней. Если вам нужно что-то кроме стандартного, документированного поведения, вам лучше написать собственное решение. Это не должно быть чрезвычайно сложно сделать, особенно потому что у вас есть доступ к вводу-выводу изображения для всех ваших миниатюр и предварительных просмотров: https://developer.apple.com/library/mac/documentation/graphicsimaging/Conceptual/ImageIOGuide/imageio_source/ikpg_source.html
Надеюсь это поможет!