代码之家  ›  专栏  ›  技术社区  ›  Tricky

嵌套Calayers不接受透视转换

  •  2
  • Tricky  · 技术社区  · 14 年前

    我正试图利用Calayers在我的一个应用程序中创建一个3D风格的效果。然而,似乎嵌套的炉墙没有透视图应用于它们。

    要用伪代码来演示,如果我有一个应用透视图的层,如下所示:

    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];
    

    旋转时嵌套层是平的。

    这就好像超级层只将转换应用于层层次结构中它正下方的层。是这样吗?还是我做错了什么?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Tricky    14 年前

    诀窍是使用catransformlayer作为子层。

    由于该层实际上不“显示”任何内容,因此需要将传统的calayer添加为catransformlayer的子层来完成显示内容的工作。但它所做的是一项出色的工作,即维护一个对象坐标空间,然后将适当的变换应用到其子层。