IOS开发——旋转(CGAffineTransformMakeRotation)之后view和子view坐标系的变化
2016-08-16 16:35
495 查看
好久没有写博客了,最近项目中遇到了视图旋转的运用,在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的变化
上代码.....
运行效果:
[b]视图一旋转前
[/b]
[b]视图一旋转后 [/b]
旋转前后结果分析:
视图一旋转90° ,视图一以及其子视图都会发生视图效果改变,但是只有视图一自身frame发生变化,这里值得注意的是bounds并没有发生变化
原因分析:
视图旋转只影响视图本身以及子视图的视觉效果,视图旋转改变了其在父视图中的位置但并未改变自身尺寸,也没有改变子视图在其坐标系的位置,另外该旋转是围绕center为中心进行的,so 只有旋转的视图自身frame发生改变、bounds和center不受影响,子视图的坐标系均不受影响(bounds、center、frame)
首先明确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]; }
运行效果:
[b]视图一旋转前
[/b]
[b]视图一旋转后 [/b]
旋转前后结果分析:
视图一(v1) | 视图二(v1_1 视图一的子视图) | 视图三(v2) | |
frame | 变化 | 不变 | 不变 |
bounds | 不变 | 不变 | 不变 |
center | 不变 | 不变 | 不变 |
原因分析:
视图旋转只影响视图本身以及子视图的视觉效果,视图旋转改变了其在父视图中的位置但并未改变自身尺寸,也没有改变子视图在其坐标系的位置,另外该旋转是围绕center为中心进行的,so 只有旋转的视图自身frame发生改变、bounds和center不受影响,子视图的坐标系均不受影响(bounds、center、frame)
相关文章推荐
- iOS开发笔记--CGAffineTransformMakeRotation 实现旋转
- iOS开发笔记--CGAffineTransformMakeRotation 实现旋转
- iOS UISlider 自定义及竖版实现&& CGAffineTransformMakeRotation 实现旋转
- iOS开发-CGAffineTransformMakeRotation改变了中心解决的方法
- iOS 7 使用CGAffineTransformMakeRotation在autolayout布局下旋转图片变形.
- iOS开发-CGAffineTransformMakeRotation改变了中心解决办法
- CGAffineTransformMakeRotation 实现旋转
- CGAffineTransformMakeRotation 实现旋转
- 视图旋转之CGAffineTransformRotate和CGAffineTransformMakeRotation的区别
- iOS 集移动,旋转,缩放于一体的函数:CGAffineTransformMake(a,b,c,d,tx,ty)
- iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度
- 蜗牛爱课- CGAffineTransformMakeRotation 实现一张图片的自动旋转
- CGAffineTransformMakeRotation 实现旋转
- CGAffineTransformMakeRotation 实现旋转
- iOS 开发----CGAffineTransform平移,旋转,缩放
- CGAffineTransformMakeRotation 实现旋转
- iOS开发万能的transform注意事项,以及viewWithTag以及.png后缀可以省略的一些知识
- iOS开发之UIImageView的图片变化动画
- 【iOS开发-43】万能的transform注意事项,以及viewWithTag以及.png后缀可以省略的一些知识
- iOS7、iOS8中的CGAffineTransformRotate、view的旋转方向问题