2010-09-28 2 views
1

У меня есть NSW-приложение (-isFlipped = YES) с тремя уровнями. Подвью - это заголовок, область содержимого и нижний колонтитул. Заголовок имеет треугольник раскрытия, который разрушит представление содержимого и просто покажет заголовок и нижний колонтитул, склеенные вместе.Изменение размера с помощью Layer-Hosting NSView

Я могу сделать это довольно легко с Core Animation, но возникает странная проблема, когда я изменяю размер представления. Если я изменяю размер по горизонтали, я хочу, чтобы все три подвидности соответствовали новой ширине. Если я изменил размер по вертикали, я хочу, чтобы подпункты оставались там, где они есть (т. Е. Нижний край представления должен иметь возможность перемещаться, не затрагивая позицию подсмотра (кроме отсечения, конечно). Причина этого в том, что мне нужно свернуть размер представления, когда контентное изображение исчезло.

Что происходит на самом деле, так это то, что все три подсмотра выдвигаются вверху представления при изменении высоты ... и затем привязываются назад, когда горизонталь изменяется.Это как-то связано с комбинацией как представления, так и subViews, потому что, если subviews размещены непосредственно в окне, они ведут себя корректно. Кроме того, я попытался добавить кнопку в представление и вести себя нормально .

Я был в состоянии получить кнопку неправильно так же, сделав его с поддержкой слоев ... поэтому я думаю, что поддержка слоя имеет какое-то отношение к этому.

Это похоже на то, что слои подложки застревают к родительскому виду, поскольку он изменяет размер и подталкивается, хотя координаты перевернуты.

Любые идеи?

ответ

4

В представлениях размещения в слое не должно быть подчиненных объектов. См - (Недействительными) setWantsLayer: документация в справочнике класса NSView:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html%23//apple_ref/occ/instm/NSView/setWantsLayer:

вид Root должен быть, возможно, слой поддержал мнение, а не слой хостинг один?