iOS UIView
2016-03-18 23:15
363 查看
iOS UIView
主要内容:frame 与 bounds 的区别
frame 与 bounds 的区别
先给个定义:frame
该view在 superView 坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds
该 view 在自身坐标系统中的位置和大小。(参照点是本身坐标系统)
上面这段话可能有点难以理解。来举个例子:我们假设有一个绝对的、以显示器左上角作为坐标原点的坐标系
Z,考虑以下两种情况:(代码不长,请仔细看代码)
第一种情况:
代码:- (void)viewDidLoad { [super viewDidLoad]; [self.view setBackgroundColor:[UIColor grayColor]]; UIView *view1 = [[UIView alloc] init]; [view1 setFrame:CGRectMake(50, 50, 200, 200)]; [view1 setBackgroundColor:[UIColor redColor]]; [self.view addSubview:view1]; // 则self.view的子视图view1在绝对坐标系Z中的坐标是(50, 50) UIView *view2 = [[UIView alloc] init]; [view2 setFrame:CGRectMake(50, 50, 50, 50)]; [view2 setBackgroundColor:[UIColor greenColor]]; [view1 addSubview:view2]; // 则view1的子视图view2在绝对坐标系Z中的坐标是(100, 100) }
结果:
第二种情况:
在第一种情况的基础上增加下面这行代码修改 view1 的 bounds:[view1 setBounds:CGRectMake(50, 50, 200, 200)]; // 即把view1的bounds.origin从 (0, 0)修改为(50, 50) // 则view1的子视图view2在绝对坐标系Z中的坐标变成了(50, 50)
结果:
比较
比较以上两种情况,其实我们可以发现:设置了view1的
frame之后,实际上已经确定了
view1的位置和大小,此时
view1的起始位置(最左上角的点)是确定了的。当我们修改
bounds的时候,实际上不会对
view1的位置有任何影响,而是移动了
view1的自身坐标系。在此例中,
view1起始位置的绝对坐标为(50, 50)已经确定,设置
view1.bounds.origin为(50, 50)的时候,表示
view1的起始位置在它自身坐标系的(50, 50)处,而此时
view1的位置不动,实质上是将坐标系原点往左上方向移动了。
总结
因此我们可以知道,对一个 view 来讲,它在 superView 中的位置仅仅由 frame 决定,而它的 bounds 仅仅能决定它所有子视图的位置以及它自身的大小。如果嫌写得太短的话可以参考以下两篇博客(各种详细..):
ios view的frame和bounds之区别(位置和大小) - 其实并不难,是你太悲观 - 博客频道 - CSDN.NET
视图UIView的frame、bounds与center属性 - Puzhi的专栏 - 博客频道 - CSDN.NET
相关文章推荐
- MUI-基础01
- JUnit 3.8 让所有测试程序 实现 复合的测试(TestSuite)
- bzoj 2037: [Sdoi2008]Sue的小球
- MUI-几种页面打开方式
- UESTC758(贪心)
- UIToolBar
- Java中1000==1000为false而100==100为true
- UISearchBar
- UITableView左滑设置更多的按钮
- 第62课:Spark SQL下的Parquet使用最佳实践和代码实战
- IOS 欢迎页(UIScrollView,UIPageControl)
- UI进阶——多线程
- PHP中require、include的区别
- UIView 中position 和anchorPoint 的了解 iOS
- ue4 常见问题解答
- UVA 1423 Guess 拓扑排序
- 交换排序—快速排序(Quick Sort)
- DEPENDENT SUBQUERY标记
- leetcode 232. Implement Queue using Stacks
- [扫描线 线段树 暴力] BZOJ 4059 [Cerc2012]Non-boring sequences