IOS开发——旋转(CGAffineTransformMakeRotation)之后view和子view坐标系的变化

好久没有写博客了,最近项目中遇到了视图旋转的运用,在view 旋转之后view以及子view的坐标系发生了一系列变化,做项目时赶时间没太理清他们之间的关系,项目完毕整理一下这方面的知识记录一下。

首先明确frame、bounds、center的概念,这对于后期理解非常重要

frame:(CGRect结构体)该视图左顶点在父视图的坐标系下的位置,以及该视图在父视图中占据的宽和高

bounds:(CGRect结构体)描述的是该视图自己坐标系顶点的基准值,以及该视图自身的大小

center:(CGPoint类型)描述了该视图中心点在父视图坐标系下的位置

更深入的一些差异见这篇文章:http://blog.csdn.net/qq_17354271/article/details/45999265


写了一个小demo来观察视图frame、bounds、center的变化

上代码.....


- (void)viewDidLoad {
    [super viewDidLoad];
    [self printViews];
}

- (void)printViews{
    NSLog(@"视图一");
    [self printView:_v1];
    NSLog(@"视图二");
    [self printView:_v1_1];
    NSLog(@"视图三");
    [self printView:_v2];
    NSLog(@"************************************");
}

- (void)printView:(UIView*)view{
    NSLog(@"frame = %@",NSStringFromCGRect(view.frame));
    NSLog(@"Bounds = %@",NSStringFromCGRect(view.bounds));
    NSLog(@"Center = %@",NSStringFromCGPoint(view.center));
    
}

- (void)transform:(UIView*)view{
//    [view setTransform:CGAffineTransformRotate(CGAffineTransformIdentity, M_PI_2)];
    [view setTransform:CGAffineTransformMakeRotation(M_PI_2)];
    
    NSLog(@"旋转后 视图一");
    [self printView:_v1];
    NSLog(@"旋转后 视图二");
    [self printView:_v1_1];
}

- (IBAction)btnTransTouchDown:(id)sender {
    [self transform:_v1];
}

运行效果:

  

视图一旋转前

      

     视图一旋转后 


旋转前后结果分析:

 视图一(v1)视图二(v1_1 视图一的子视图)视图三(v2)
frame变化不变不变
bounds不变不变不变
center不变不变不变

视图一旋转90° ,视图一以及其子视图都会发生视图效果改变,但是只有视图一自身frame发生变化这里值得注意的是bounds并没有发生变化

原因分析:

视图旋转只影响视图本身以及子视图的视觉效果,视图旋转改变了其在父视图中的位置但并未改变自身尺寸,也没有改变子视图在其坐标系的位置,另外该旋转是围绕center为中心进行的,so 只有旋转的视图自身frame发生改变、bounds和center不受影响,子视图的坐标系均不受影响(bounds、center、frame)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值