iOS transform3D,;双视图X轴旋转,;更改视图层次结构,;为什么?;

iOS transform3D,;双视图X轴旋转,;更改视图层次结构,;为什么?;,ios,objective-c,swift,Ios,Objective C,Swift,[UIView animateWithDuration:1动画:^{ self.redView.transform3D=CATTransferorM3dRotate(CATTransferorM3dDidEntity,M_PI_2/2,1,0,0); self.orangeView.transform3D=CATTransferorM3dRotate(CATTransferorM3dDidEntity,M_PI_2/2,1,0,0); }]; 为什么?请帮帮我,谢谢!视图层次结构没有更改-下

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


为什么?请帮帮我,谢谢!

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

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


谢谢!我知道视图层次结构没有改变,但在旋转之后,它将显示在orangeview的顶部。为什么?较小的视图在后面,但是当你旋转它时,因为它较小,所以它旋转的距离没有较大的视图远。越大的旋转角度相同,但因为越大,距离越远。因此,在旋转之前,它们处于相同的位置,但由于层次关系,可以看到更大的位置。旋转后,较小的一个更靠近,并显示在前面。是的,谢谢这是一个很好的例子,几乎像一个拼图。我不明白,我认为相同的角度,也与尺寸测量无关-对于redView,将您的代码更改为
redView.center=CGPointMake(150151)    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;
    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 );
        }

    }];