UIView的frame和bounds区别
2015-09-17 14:29
471 查看
UIView的frame和bounds区别
iOS中,大家肯定对view和frame都不陌生,我们设置view在父view中的位置和大小时,只需要设置frame就可以了。可能大家也有查过网上的一些资料,可能也会得知frame是相对于superview坐标系的,而bounds则相对于view自身的坐标系,但是frame究竟是怎样表示坐标的呢,其实这就和bounds有关了。
值得肯定的是frame.size 和bounds.size 肯定一样,但是UIView中,frame其实是不存储的,而是动态计算的,改变center,改变bounds大小,或者改变transfrom都可能会导致frame的改变。
UIView的frame是一个动态的,官方文档中有提到
// animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead.
@property(nonatomic) CGRect frame;
大意是说,如果我们的view有transform,则frame不能反映其在父view中的实际位置,需要用bounds+center来反映。
假定我们的view没有transform。 每次我们设置frame时,则系统首先会设置
bounds.origin = 0,0 bounds.size = frame.size
然后会继续设置
center.x = frame.origin.x + frame.size.width / 2 center.y = frame.origin.y + frame.size.height / 2
也就是说 设置frame时,我们的bounds和center都会发生变化,但是view的位置是由center和bounds共同决定的,完全可以不依赖于frame。
每次我们访问frame时,其实也是通过center和bounds计算。
frame.size = bounds.size frame.origin.x = center.x - bounds.size.width / 2 frame.origin.y = center.y - bounds.size.height / 2
当然期间如果有transform,则会考虑到transfrom,比如大小缩小到0.9倍,则center不变,frame.size 变为 0.9倍,origin也会跟着变。 transform不会影响到view的bounds和center,但是会影响到frame。
相关文章推荐
- UItextField常用方法
- UItextField常用方法
- Easyui Datebox设置可选时间范围
- ZOJ 3892 Available Computation Sequence 区间dp
- This Android SDK requires Android Developer Toolkit version 22.6.2 or above.
- UICollectionView简单的重排功能
- google 博客huilink
- fuelux-tree API 实例
- 使用cloudera-quickstart-vm无配置快速部署Hadoop应用
- iOS开发 - 创建自定义的UITextField
- java execute、executeQuery和executeUpdate之间的区别
- ORA-12514 TNS:listener does not currently know of service requested in connect descriptor
- NSdata 与 NSString,Byte数组,UIImage 的相互转换
- sublime自己写build System
- UIScrollView
- BLE obtain uuid encoded in advertising packet
- JS获取request参数 和改变request参数
- UEdit插件使用
- *** does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE
- Solr Multivalue field的索引和搜索