Проблема изменения размера с помощью Layer-Hosting NSView

У меня есть NSView с размещением на уровне (-isFlipped = YES) с тремя подвидами размещения на уровне. Подпредставления — это заголовок, область содержимого и нижний колонтитул. В заголовке есть треугольник раскрытия, который свернет представление содержимого и просто покажет верхний и нижний колонтитулы, склеенные вместе.

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

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

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

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

Любые идеи?


person Jon Hull    schedule 28.09.2010    source источник


Ответы (1)


Представления размещения слоев не должны иметь вложенных представлений. См. документацию -(void)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:

Корневой вид, возможно, должен быть представлением, поддерживаемым слоем, а не слоем, на котором он размещен?

person pqnet    schedule 26.05.2011