UIView 中bounds和frame的差别

搞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属性影响到本地坐标系统的原点。需要注意

时间: 2024-10-16 02:50:50

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

一张图让你明白IOS中bounds和frame的区别

很多人在学习的就搞混了bounds和frame的区别,大家可以看看这张图就会明白它俩的区别: frame: 该view在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小.(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点) center:该view的中心点在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) 看上图中,如果将ViewA的bounds设置为(-200,-100,550,400)

【iOS7的一些总结】8、破解UIView中坐标系的秘密:关于UIView中的frame、bound和center

对于刚刚接触iOS开发不久的新手来说,UIView中的frame.bound和center的确容易产生思维的误区,尤其是想要对视图类的bound这个概念若想要理解深入,真的要花一番功夫.在经过一系列查阅参考资料和动手试验之后,终于对这几个概念产生了一些领悟,记录于此可供有同样困惑的同学参考. 首先贴一篇博文做参考,http://blog.csdn.net/mad1989/article/details/8711697:这篇博文已经对UIView的frame和bound做了一些阐述,但是我依然觉得

Objective-C日记-Bounds和Frame

今天在学习有关UIView时,关于Bounds和Frame的问题困扰多时,今日研究了一翻,有所收获,遂记之. 一.问题来源 网上有关bounds和frames的比较的文章主要就是一篇:http://blog.csdn.net/mad1989/article/details/8711697,核心思想是bounds的坐标系是相对于自己而言,而frames的坐标系是相对于父视图,主要的演示代码如下: UIView *view1 = [[UIView alloc] initWithFrame:CGRec

bounds和frame的区别?

frame和bounds都市用来描述一块区域的 frame是以父控件的左上角为原点,可视范围相对于父控件 bounds:描述是可视范围在内容哪个区域,相对于内容. 可视化区域在内容中显示区域,bounds的x,y可以改(改的是内容原点的位置) 任何控件都有自己的内容,而且这个内容无限大 子控件都市相对于内容 UIView *redView = [[UIView alloc] init]; redView.frame = CGRectMake(50, 50, 200, 200); redView.

UIView 中 hidden、alpha、clear color 与 opaque 的区别

透明度与图层混合相关,影响到图片绘制的效率. hidden 此属性为 BOOL 值,用来表示 UIView 是否隐藏.关于隐藏大家都知道就是让 UIView 不显示而已,但是需要注意的是: 当前 UIView 的所有 subview 也会被隐藏,忽略 subview 的 hidden属性.UIView 中的 subview 就相当于 UIView 的死忠小弟,老大干什么我们就跟着老大,同进同退,生死与共! 当前 UIView 也会从响应链中移除.你想你都不显示了,就不用在响应链中接受事件了. a

DIV中display和visibility属性差别

DIV中display和visibility属性差别 DIV中display和visibility属性差别还是挺大的,虽然Visibility和Display属性都可以达到隐藏页面元素的目的,但它们的区别在于如何回应正常文档流 本节向大家描述一下DIV中display和visibility的差别,visibility属性是隐藏元素但保持元素的浮动位置,而display实际上是设置元素的浮动特征,虽然它们都可以达到隐藏页面元素的目的,但它们的区别在于如何回应正常文档流. DIV中display和v

UIView中的动画设置

两种状态的改变通过动画来渐变,设置动画效果,一般采用的方式有以下几种: 方式一: [UIView beginAnimations:(NSString *) context:<#(void *)#>]; [UIView setAnimationDuration:<#(NSTimeInterval)#>]; /*****这里插入需要产生动画的片段*****/ [UIViewcommitAnimations]; 其中NSString和void这两个参数可设为nil:NSTimeInter

一句话搞定IOS中View的Frame和Bound

就一句话,Frame是父View上看到子View的窗户,Bound是子View上可以被父View看见的内容. 稍微解释下.Frame 指子View在父View中的位置以及大小.由两部分构成,第一部分是Origin,规定了子View在父类的位置.第二部分是Size,指View在父类中的可视范围(这里能说是View的大小).这感觉像是在父View中在Frame.Origin位置打开一个窗户,窗户的大小是Frame.Size,从窗户中可以看到子View的内容. Bound 指子View自身显示那些内容

ios 开发日记 9 - 一些 UIView 中管理 Subview 常用的方法

一些 UIView 中管理 Subview 常用的方法 (2013-01-22 10:04:40) 标签: ios subview it 分类: 關于IOS學習 一些 UIView 中管理 Subview 常用的方法 一个 UIView 里面可以包含许多的 Subview(其他的 UIView),而这些 Subview 彼此之间是有所谓的阶层关系,这有点类似绘图软体中图层的概念,下面程式码示演示了几个在管理图层(Subview)上常用的方法,其程式码如下. 首先是大家最常使用的新增和移除 Sub