首页 > 解决方案 > iOS transform3D,两个视图X轴旋转,改变视图层次,为什么?

问题描述

    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
    redView.center = CGPointMake(150, 150);
    redView.backgroundColor = [UIColor redColor];
//    redView.layer.zPosition = -1;
    [self.view addSubview:redView];
    self.redView = redView;
    
    UIView *orangeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    orangeView.center = CGPointMake(150, 150);
    orangeView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:orangeView];
    self.orangeView = orangeView;

[UIView animateWithDuration:1 动画:^{ self.redView.transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI_2 / 2, 1, 0, 0); self.orangeView.transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI_2 / 2, 1, 0, 0); }];

改造前

改造后

为什么?请帮帮我,谢谢!</p>

标签: iosobjective-cswift

解决方案


视图层次结构没有改变 - 下面的代码将证明这一点。具体来说,我在开头显示层次结构,并添加了一个完成块以在最后显示层次结构,它是相同的。

但是,您看到的内容从 2D 变为 3D,因此看起来与您的预期不同。下面的代码也将显示这一点。围绕不同的轴旋转平面。

在此处输入图像描述

    NSLog(@"Red    %p", redView);
    NSLog(@"Orange %p", orangeView );

    NSLog ( @"Hierarchy at start" );

    for ( UIView * view in self.view.subviews )
    {
        NSLog ( @"\t%p", view );
    }

    [UIView animateWithDuration:1
             animations: ^ {

        self.redView.transform3D    = CATransform3DRotate ( CATransform3DIdentity, M_PI_2 / 2, 1, 0, 0 );
        self.orangeView.transform3D = CATransform3DRotate ( CATransform3DIdentity, M_PI_2 / 2, 0, 1, 0 );

    }
             completion: ^ ( BOOL finished ) {

        NSLog ( @"Hierarchy at end fin %@", finished ? @"YES" : @"NO" );

        for ( UIView * view in self.view.subviews )
        {
            NSLog ( @"\t%p", view );
        }

    }];

推荐阅读