アプリケーションの 1 つで CALayers を使用して 3D スタイルの効果を作成しようとしています。ただし、ネストされた CALayer にはパースペクティブが適用されていないようです。
疑似コードで説明するために、パースペクティブが適用されたレイヤーがある場合、次のようにします。
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];
ネストされたレイヤーは、回転するとフラットになります。
あたかも、スーパーレイヤーがレイヤー階層でその直下にあるレイヤーにのみ変換を適用するかのようです。これは事実ですか?それとも私は何か間違ったことをしていますか?