IOS开发——旋转(CGAffineTransformMakeRotation)之后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];
}
运行效果:
image.png视图一旋转前
![image.png](https://upload-images.jianshu.io/upload_images/1155365-ce07234cc495777d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
视图一旋转后
旋转前后结果分析:
视图一(v1) | 视图二(v1_1 视图一的子视图) | 视图三(v2) | |
---|---|---|---|
frame | 变化 | 不变 | 不变 |
bounds | 不变 | 不变 | 不变 |
center | 不变 | 不变 | 不变 |
视图一旋转90° ,视图一以及其子视图都会发生视图效果改变,但是只有视图一自身frame发生变化,这里值得注意的是bounds并没有发生变化
原因分析:
视图旋转只影响视图本身以及子视图的视觉效果,视图旋转改变了其在父视图中的位置但并未改变自身尺寸,也没有改变子视图在其坐标系的位置,另外该旋转是围绕center为中心进行的,so 只有旋转的视图自身frame发生改变、bounds和center不受影响,子视图的坐标系均不受影响(bounds、center、frame)
原文:https://blog.csdn.net/wenzeliang1013/article/details/52220829
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!