Frame,Bounds和Center的区别,联系
来源:互联网 发布:老司机 知乎 收藏夹 编辑:程序博客网 时间:2024/05/16 18:40
部分内容转载自:http://blog.csdn.net/mad1989/article/details/8711697
看一段Demo:
UIView *view1 = [[UIViewalloc]initWithFrame:CGRectMake(20,20,280,250)];
[view1 setBounds:CGRectMake(-20, -20,500,500)];
view1.backgroundColor = [UIColorredColor];
[self.viewaddSubview:view1];//添加到self.view
NSLog(@"view1 frame:%@========view1 bounds:%@======view1 center:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds),NSStringFromCGPoint(view1.center));
[view1 setFrame:CGRectMake(50,50,200,200)];
NSLog(@"again===view1 frame:%@========view1 bounds:%@======view1 center:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds),NSStringFromCGPoint(view1.center));
UIView *view2 = [[UIViewalloc]initWithFrame:CGRectMake(0,0,100,100)];
view2.backgroundColor = [UIColoryellowColor];
[view1 addSubview:view2];//添加到view1上,[此时view1坐标系左上角起点为(-20,-20)]
NSLog(@"view2 frame:%@========view2 bounds:%@======view2 center:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds),NSStringFromCGPoint(view2.center));
再看下log日志:
2015-02-13 14:44:21.767 [37262:272312] view1 frame:{{-90, -105}, {500, 500}}========view1 bounds:{{-20, -20}, {500, 500}}======view1 center:{160, 145}
2015-02-13 14:44:21.768 [37262:272312] again===view1 frame:{{50, 50}, {200, 200}}========view1 bounds:{{-20, -20}, {200, 200}}======view1 center:{150, 150}
2015-02-13 14:44:21.768 [37262:272312] view2 frame:{{0, 0}, {100, 100}}========view2 bounds:{{0, 0}, {100, 100}}======view2 center:{50, 50}
可以得出这几个结论:
1.bounds和frame的size的width和height都一样
2.若frame改变,则bounds和center都改变
3.若bounds改变,则frame改变,但是center不变
4.bounds会影响当前view的subview的位置,但不会影响当前view的位置。
以上的结论有一个前提,就是view的transform属性的值是恒等变换的,(也就是CGAffineTransformIsIdentity()的值是YES)。
如果transform属性的值不是恒等变换的,那么frame属性的值就是未定义的,必须被忽略。在设置变换属性之后,要使用bounds和center属性来获取视图的位置和大小。
这种情况往往发生在对view的属性做transform变换之后。
以一个Demo来举例:
UIView *testView = [[UIViewalloc]initWithFrame:CGRectMake(0,0,100,100)];
testView.backgroundColor = [UIColorgreenColor];
[self.viewaddSubview:testView];
testView.transform =CGAffineTransformMakeScale(0.5,0.5);
NSLog(@"testView frame:%@========testView bounds:%@======testView center:%@",NSStringFromCGRect(testView.frame),NSStringFromCGRect(testView.bounds),NSStringFromCGPoint(testView.center));
2015-02-13 16:13:09.791 [39158:326284] testView frame:{{25, 25}, {50, 50}}========testView bounds:{{0, 0}, {100, 100}}======testView center:{50, 50}
CGAffineTransformIsIdentity(testView.transform)为NO。
这就是一个不恒等变换,此时的位置要根据bounds和center来计算得出。设置testView.transform =CGAffineTransformIdentity;可以复原testView的位置,也就是frame为(0,0,100,100)。
- Frame,Bounds和Center的区别,联系
- frame、bounds、center的区别
- frame\bounds\center的区别
- frame\center\bounds的区别
- frame.bounds和center
- frame、bounds和center
- frame,bounds和center
- frame.center和bounds
- Frame,Bounds的区别,center属性
- frame、bounds和center的使用场景
- iOS开发总结之 view的frame、center和和view的bounds之间的区别
- frame 和bounds 的区别
- bounds和frame的区别
- frame和bounds的区别
- frame 和 bounds 的区别
- frame和bounds的区别
- frame和bounds的区别
- frame和bounds的区别
- JVM垃圾收集算法及垃圾收集器
- 管理学的二十大定律
- XIB、Storyboard操作小技巧
- Eclipse设置类似Sublime Text 编辑区皮肤,风格,颜色
- Android开发铃声的设置与播放
- Frame,Bounds和Center的区别,联系
- Poj 2503 Babelfish
- 从不同步的代码块中调用了对象同步方法 C#
- opencv实现车牌识别之字符识别
- 《网络流学习笔记05--最小割最大流问题》
- 一、STM32L0538DISCOVERY 开发板到手
- hdu 4438
- uvalive4794(集合+状态压缩)
- NFS性能优化手册