Я пытаюсь использовать CALayers для создания эффекта стиля 3D в одном из моих приложений. Однако, похоже, что вложенные слои CALay не имеют перспективы, примененной к ним.
Чтобы проиллюстрировать псевдокодом, если у меня есть слой с перспективой, примененной так:
CATransform3D subLayerTransform = CATransform3DIdentity;
/* set perspective */
subLayerTransform.m34 = -0.002;
superLayer.sublayerTransform = subLayerTransform;
добавить, а затем добавить слой к нему так:
CALayer *sublayer = [CALayer layer];
sublayer.frame = layerFrame;
sublayer.contents = (id)[image CGImage];
[superLayer addSublayer: sublayer];
Перспектива применяется, как и ожидалось. Однако, если бы я попытался вложить слои дальше
CALayer *sublayer = [CALayer layer];
[superLayer addSublayer: sublayer];
CALayer *nestedlayer = [CALayer layer];
nestedlayer.frame = layerFrame;
nestedlayer.contents = (id)[image CGImage];
[sublayer addSublayer: nestedlayer];
При вращении вложенный слой является плоским.
Как будто суперслой применяет преобразование только к слоям, которые находятся непосредственно под ним в иерархии слоев. Это тот случай? Или я что-то не так делаю?