首先明確frame猖凛、bounds、center的概念,這對于后期理解非常重要
frame:(CGRect結構體)該視圖左頂點在父視圖的坐標系下的位置修肠,以及該視圖在父視圖中占據(jù)的寬和高
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];
}
運行效果:
視圖一旋轉前.png
視圖一旋轉后.png
旋轉前后結果分析:
視圖一(v1) | 視圖二(v1_1 視圖一的子視圖) | 視圖三(v2) | |
---|---|---|---|
frame | 變化 | 不變 | 不變 |
bounds | 不變 | 不變 | 不變 |
center | 不變 | 不變 | 不變 |
視圖一旋轉90° ,視圖一以及其子視圖都會發(fā)生視圖效果改變莽鸭,但是只有視圖一自身frame發(fā)生變化吗伤,這里值得注意的是bounds并沒有發(fā)生變化
原因分析:
視圖旋轉只影響視圖本身以及子視圖的視覺效果,視圖旋轉改變了其在父視圖中的位置但并未改變自身尺寸硫眨,也沒有改變子視圖在其坐標系的位置足淆,另外該旋轉是圍繞center為中心進行的,so 只有旋轉的視圖自身frame發(fā)生改變、bounds和center不受影響缸浦,子視圖的坐標系均不受影響(bounds夕冲、center、frame)
原文:https://blog.csdn.net/wenzeliang1013/article/details/52220829