ios - 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>
解决方案
视图层次结构没有改变 - 下面的代码将证明这一点。具体来说,我在开头显示层次结构,并添加了一个完成块以在最后显示层次结构,它是相同的。
但是,您看到的内容从 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 );
}
}];
推荐阅读
- sql - SQL - 查询层次结构以确定责任
- javascript - Javascript计算器应用程序中的前导零和小数
- c - getopt() 解析模式不起作用
- graylog2 - Graylog 停止记录异常
- centos - MEAN Stack 在 CentOS 6.10 上不起作用(多个错误)
- xpath - 如何在 inspect.exe 中获取绝对 Xpath
- c# - ASP.Net Core 2.1 注册自定义 ClaimsPrincipal
- kotlin - 在 kotlin 中乘以双打(浮点错误?)
- javascript - 如何使节点模块在浏览器中可用,如 *socket.io* 确实
- javascript - 如何在我的整个应用程序中使用 angularjs 的变量