搞iOS开发的童鞋基本都会用过UIView,那他的bounds和frame两个属性也不会陌生,那这两个有什么实质性的区别呢?

先看到下面的代码你肯定就明白了一些:

-(CGRect)frame{
    returnCGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
    returnCGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
很明显,bounds的原点是(0,0)点,而frame的原点却是任意的。

再来看张图,你就会更清楚了。

基本概念:

      frame:该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
      bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统)
      center:该view的中心点在父view坐标系统中的位置和大小。(参照电是,父亲的坐标系统)
实际上只有bounds和center两个属性。frame是为了方便直观多加的属性。所以修改了一个可能会影响到其他属性。文档中如下说:
      Although you can set the values of theseproperties independently, setting the value for one changes theothers in t
he following ways:
      When
you set the frame property, the sizeof the bounds property is set to
match the size of theframeproperty. The center property is also adjusted
to match thecenter point
of the new frame.
      When you set the center property, theorigin of the frame changes accordingly.
      When you set the size of the boundsrectangle, the size of the frame rectangle changes to match。
前两个很明显,最后一个bounds稍微有点费解。这里一定要顺便说下本地坐标系统:每个
view都有一个本地坐标系统。这个坐标系统作用比较重要,比如触摸的回调函数中的UITouch里面的>坐标值都是参照这个本地坐标系统的坐标。
当然bounds这个属性也是参照这个本地坐标系统来的。其实本地坐标系统的关键就是要知道的它的原点(0,0)在什么位置(这个位置又是相对于上层的
view的本地坐标系统而言的,当然最上面的一层view就是window它的本地坐标系统原点就是屏幕的左上角了)。通过修改view的bounds属
性可以修改本地坐标系统的原点位置。
修改bounds测试结果:
      bounds (0,0,100,100) -->(0,0,200,200) 本地坐标系统原点往左往上分别50。center不变,效果是按照中心放大view
      bounds(0,0,100,100) -->(100,100,100,100)本地坐标系统原点往左往上分别100。center不变,没有可视效果变化(但是本地坐标系统的原点已经改变)
      
结论:
     bounds属性影响到本地坐标系统的原点。需要注意

UIView 中bounds和frame的差别的更多相关文章

  1. IOS中bounds和frame

    * 用bounds和frame来修改尺寸是有一些小区别的 三.isEqual:方法 1> 系统会根据对象isEqual方法的返回值来决定两个对象是否相同 * 比如判断对象a和b是否相同,就会查看 ...

  2. UIView 中 frame, bounds, center 属性的关系

    最近一直在学 iOS 开发,所以专门创建了这样一个类别,将自己学习中的一些问题整理,记录下来.由于自己是初学者,所以所写的文章非常基础,写这个类别一是为了给自己留下存 档,二是为了给和我有同样问题的初 ...

  3. bounds 和 frame

    使用环境: 一个UIView 添加xib View 时需要注意使用 frame and bounds 代码: frame 和 bounds 对比 样式对比 其实说白了就是 frame: 该view在父 ...

  4. Objective-C日记-Bounds和Frame

    今天在学习有关UIView时,关于Bounds和Frame的问题困扰多时,今日研究了一翻,有所收获,遂记之. 一.问题来源 网上有关bounds和frames的比较的文章主要就是一篇:http://b ...

  5. iOS bounds、frame之间的关系

    这几个都是在ios程序中,经常会注意到的一些小细节,能否真正了解这些,对写ios程序也有很大的好处. frame 是UIView中表示此view的一个矩形面积,包括了view在它的superview中 ...

  6. bounds与frame的区别及setBounds的使用

    转自http://www.cocoachina.com/ios/20140925/9755.html 在iOS开发中经常遇到两个词Frame和bounds,本文主要阐述Frame和bound的区别,尤 ...

  7. iOS开发——项目篇—高仿百思不得姐 05——发布界面、发表文字界面、重识 bounds、frame、scrollView

    加号界面(发布模块) 一.点击加号modal出发布模块,创建控件,布局控件1)使用xib加载view,如果在viewDidLoad创建控件并设置frame 那么self.view 的宽高 拿到的是xi ...

  8. ios 中直接修改frame里边某个属性的简便方法

    参考:http://www.cnblogs.com/wengzilin/p/4359865.html 在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候.我们知道,正常情况下我们无法 ...

  9. 关于UIView中相关坐标及改变的相关方法

    // 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值 - (CGPoint)convertPoint:(CGPoint)point toView:(UI ...

随机推荐

  1. struts2笔记02-action和Action类

    1.action      action表示一个struts2的请求! 2.Action类 能够处理struts2请求的类. (1)属性的名字需要与JavaBeans属性保持一致. 属性的类型可以是任 ...

  2. Silverlight并行下载与串行下载

    思路清晰后仅仅只需百来行代码便可轻松编写出一套完整的资源动态下载组件- SerialDownloader和ParallelDownloader,它们共用一个完成资源表,且串行下载集成了优先机制(Dow ...

  3. 'gbk' codec can't encode character

    做爬虫抓取网页,print(html)进行调试,遇到UnicodeEncodeError: 'gbk' codec can't encode character XX in position XX问题 ...

  4. TCPL 行计数

    C programming language: P13 行计数 e.g. #include <stdio.h>int main(void){    int c, nb, nt, nl;   ...

  5. hdu4288 Coder

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  6. 单机Oracle+asm(11.2.0.3.0) Patch Set Update(11.2.0.3.7 )

    之前写过一篇关于PSU升级的案例,参考如下: http://blog.csdn.net/jyjxs/article/details/8983880 但是,感觉有些地方理解的不是很透彻明白,照猫画虎的比 ...

  7. rsyslog start with

    startswith Checks if the value is found exactly at the beginning of the property value. For example, ...

  8. 字符串匹配——KMP算法

    关于KMP算法的分析,我觉得这两篇博客写的不错: http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html ht ...

  9. 面向对象程序设计-C++_课时11new & delete

    Dynamic memory allocation new new int; new Stash; new int[10]; new返回这个对象的指针 delete delete p; delete[ ...

  10. 项目代码摘抄,dot的用法之1

    function searchTags() { var list = $('#tags-list-select option:selected').val(); console.log(list); ...