Могу ли я установить layer.transform на NSView с подпредставлениями? - PullRequest
1 голос
/ 13 мая 2011

Я хотел бы иметь NSView с подпредставлениями (изображения, текст и т. Д.), А затем применить к нему 3d-преобразование, используя myView.layer.transform = myTransform.

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

Если это представление с размещением слоев, то у меня не должно быть подпредставлений.

Если я хочу установить layer.transform, означает ли это, что я должен настроить все свои рисунки через CALayer и прекратить использовать подпредставления?

1 Ответ

0 голосов
/ 14 мая 2011

Я просто настроил анимацию CALayer на NSView, который имеет вложенные подпредставления, NSScrollViews, и все работает нормально. Я думаю, что ограничение накладывается на перекрывающиеся представления. (Проблема с последним состоит в том, что нет определенного порядка рисования; непредсказуемо, какой вид будет отображаться сверху.)

Но если вы хотите применить преобразование также к подпредставлениям, вам придется настроить слои для них отдельно. Или, да, вы можете сбросить подпредставления и поместить все в CALayers одного представления. Вы можете контролировать их размер и размещение, используя свойства границ и положения. (Положение примечания от центра, а не внизу, если вы не измените точку привязки.)

Если вы делаете хостинг слоев, не применяйте ваше преобразование к корневому слою (view.layer). Вместо этого создайте новый CALayer, добавьте к нему содержимое, добавьте к нему преобразование и примените его в качестве подслоя к корневому слою. Избегайте работы с корневым слоем напрямую.

Быстрый пример настройки Layer-хостинга:

// Set up the root layer.
[[self.aViewController view] setLayer:[CALayer layer]];
[[self.aViewController view] setWantsLayer:YES];
// Set up a sublayer.
CALayer *sublayer = [CALayer layer];
[self.aViewController.view.layer addSublayer:sublayer];
// Repeat if you need additional sublayers. There's a name property if you need to distinguish between them.
...