7

zPositionレイヤーのは、どのレイヤーがどのレイヤーを覆うかを決定するだけであることが知られています。それがzPosition10 であろうと 1000 であろうと、その位置には影響しません。

つまり、これらのレイヤーを含めるために使用しない限り、これらレイヤーCATransformLayerzPositionの はレイヤーの位置に影響します。

ただし、iOS 5.1.1 で実行されている次のコードzPositionでは、レイヤーの位置が変更されます。新しいシングル ビュー アプリで試して、次のコードをViewController.m. のzPositionをからにlayer2変更すると、それに応じてレイヤーが移動することがわかります。したがって、コードにはありません。なぜそのように振る舞うのでしょうか?(Appleのドキュメントまたは参考文献を引用してください)。88188CATransformLayer

また、関連するのは、行self.view.layer.sublayerTransform = transform3D;が変更されたself.view.layer.transform = transform3D; 場合zPosition、位置に影響を与えないことです。しかし、Apple docs によると、transformselfsublayerTransformが変換されるかどうかだけが異なります:

transformおよび の 2 つのレイヤー プロパティが変換行列を指定しますsublayerTransform。で指定された行列transform propertyは、レイヤーの を基準にして、レイヤーとそのサブレイヤーに適用され anchorPointます。[...] sublayerTransformプロパティで指定されたマトリックスは、レイヤー自体ではなく、レイヤーのサブレイヤーにのみ適用されます。

したがって、なぜそれを変更するとself.view.layerのように振る舞うのか不思議ですCATransformLayer

-(void) viewDidAppear:(BOOL)animated {

    CATransform3D transform3D = CATransform3DIdentity;

    transform3D.m34 = -1.0 / 1000;

    transform3D = CATransform3DRotate(transform3D, M_PI / 4, 0, 1, 0);

    self.view.layer.sublayerTransform = transform3D;

    CALayer *layer1 = [[CALayer alloc] init];
    layer1.zPosition = 33;
    layer1.frame = CGRectMake(100, 100, 100, 100);
    layer1.backgroundColor = [[UIColor orangeColor] CGColor];

    [self.view.layer addSublayer:layer1];

    CALayer *layer2 = [[CALayer alloc] init];
    layer2.zPosition = 88;
    layer2.frame = CGRectMake(100, 120, 100, 100);
    layer2.backgroundColor = [[UIColor yellowColor] CGColor];

    [self.view.layer addSublayer:layer2];    

}
4

1 に答える 1

0

レイヤーを座標レイヤーと考えることができます。レイヤーをtransfrom3Dにすると、座標は3Dになりますが、そのサブレイヤーはまだ2Dとして表示されますが、サブレイヤーをtransfrom3Dに設定すると、レイヤーはすべてのサブレイヤーを3Dとして表示します。回転と同じ

于 2012-12-05T15:10:28.543 に答える