iOS frame和Bounds 以及frame和bounds区别

frame

frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的。
位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有他特有的坐标系,如下图:

iOS坐标系

  • 在iOS坐标系中以左上角为坐标原点,往为X正方向,往是Y正方向
  • frame中的位置是以父视图的坐标系为标准来确定当前视图的位置
  • 同样的默认情况下,本视图的左上角就是子视图的坐标原点
  • 更改frame中位置,则当前视图的位置会发生改变
  • 更改frame的大小,则当前视图以当前视图左上角为基准的进行大小的修改

bounds

bounds是每个View都有的属性,这个属性我们一般不进行设置,他同样代表位置和大小;
每个视图都有自己的坐标系,且这个坐标系默认以自身的左上角为坐标原点,所有子视图以这个坐标系的原点为基准点。
bounds的位置代表的是子视图看待当前视图左上角的位置;bounds的大小代表当前视图的大小;

  • 更改bounds中的位置对于当前视图没有影响,相当于更改了当前视图的坐标系,对于子视图来说当前视图的左上角已经不再是(0,0), 而是改变后的坐标,坐标系改了,那么所有子视图位置也会跟着改变
  • 更改bounds的大小,bounds的大小代表当前视图的长和宽,修改长宽后,中心点继续保持不变, 长宽进行改变;通过bounds修改长宽看起来就像是以中心点为基准点对长宽两边同时进行缩放;

frame和bounds

有如下图:

iOS bounds

View A是最顶层视图, 因此他的信息如下:
frame
origin:0, 0
size :550 * 400

bounds
origin:0, 0
size 550 * 400

因为是View A是顶层视图,所以其实相当于覆盖在框架上,因此位置从父视图的(0, 0)开始,大小为550*400
默认情况下,本视图的坐标系是没有发生改变的即当前视图(view A)的左上角就是所有子视图的原点,大小就是当前视图的大小.

View B是View A的子视图,因此他的信息如下:
frame
origin:200, 100
size :200 * 250

bounds
origin:0, 0
size :200 * 250

因为View B是View A的子视图,所以View B的frame位置需要以View A的左上角为参照,因此位置为(200, 100), 大小为200*250
bounds在默认情况下本视图的坐标系是没有发生改变的即当前视图(view B)的左上角就是当前视图所有子视图的原点.

上面这种是普通的情况,也就是没有更改bounds的时候,下面我们来看更改bounds的例子, 如下图:

iOS bounds

在上一个例子的基础上,我们更改了view A的bounds后,view B看待View A的左上角就已经发生改变了;这个时候我们看待View A的左上角就不是坐标原点了,而是我们通过bounds设置后的坐标,如图也就是(0, 100);
在View B的frame没有保存不变的基础上,我们View B的位置向上移动了100

在第一例的基础上,更改了bounds中X后,效果图如下:

iOS bounds 3

总结

1、frame不管对于位置还是大小,改变的都是自己本身
2、frame的位置是以父视图的坐标系为参照,从而确定当前视图在父视图中的位置
3、frame的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生改变
2、bounds改变位置时,改变的是子视图的位置,自身没有影响;其实就是改变了本身的坐标系原点,默认本身坐标系的原点是左上角
3、bounds的大小改变时,当前视图的中心点不会发生改变,当前视图的大小发生改变,看起来效果就想缩放一样

另:

下图 red view 原始frame 为

CGRectMake(200, 200, 100, 100)];

改变bounds为

view.bounds=CGRectMake(0, 100, 200, 200);

//frame (origin = (x = 150, y = 150), size = (width = 200, height = 200))

在red view上放置跟他同样大小的yellow button ,

btn.frame=CGRectMake(0, 0, 200, 200);

发现点击red view之外的button没有用,只有点击有效部分才有效果。

时间: 2024-11-03 22:31:04

iOS frame和Bounds 以及frame和bounds区别的相关文章

iOS设备横屏时,frame和bounds的分别

工程中有两个ViewControllers,其中ViewController是root view controller,底色是红色,上面有一个按钮,点击后加载GreenViewController,并显示其视图,底色是绿色. 首先是ViewController的代码: #import "ViewController.h" #import "GreenViewController.h" @interface ViewController () @end @implem

ios基础之 view的frame 与 bounds 的区别 (转)

前言: 学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bound的含义.PS:我承认我是一个很笨很笨的人. 所以现在记录下来,供以后查阅,同时方便所有和我一样有疑惑的人查看. 一.首先列一下公认的资料: 先看到下面的代码你肯定就明白了一些: -(CGRect)frame{     return CGRectMake(self.frame.origin.x,

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

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

IOS bounds 与 frame的区别

今天写案例代码,发现资料上设置一个UIButton的frame时,是这样设置的 btnCover.frame = self.view.bounds; 但是我自己一开始是这样写的 btnCover.frame = self.view.frame; 后来,我发现,两个不同的写法都达到了我想要的想过,也就是UIButton的大小和父容器的大小一致,我就纳闷了,既然是同样的效果,为什么即有bounds又有frame.后来经查,发现如下区别: -(CGRect)frame{ return CGRectMa

iOS开发——使用OC篇&frame,bounds,center,position,anchorPoint总结

frame,bounds,center,position,anchorPoint总结 图层的 position 属性是一个 CGPoint 的值,它指定图层相当于它父图层的位置, 该值基于父图层的坐标系. 图层的 bounds 属性是一个 CGRect 的值,指定图层的大小(bounds.size)和图层的 原点(bounds.origin).当你重写图层的重画方法的时候,bounds 的原点可以作为图形 上下文的原点. 图层拥有一个隐式的 frame,它是 position,bounds,an

ios开发之UIView的frame、bounds跟center属性的区别(附图)

博文暂时想到什么写什么,不顺理成章,不顺章成篇. 先看几个概念 坐标点Poit:向右侧为X轴正方向的值x,原点下侧为Y轴正方向的值y 大小Size:由宽度width和高度height构成,表示一个矩形 区域Rect:它有坐标点Poit和大小Size构成,表示一个区域,既有位置也有大小 相对:有参照物,因参照物的大小位置改变而改变 绝对:无参照物,大小位置固定 再看代码构成: 点由这样来创建,X轴大小和Y大小 CGPoint point = CGPointMake(80,40) 大小Size由这样

iOS编程(双语版)-视图-Frame/Bounds/Center

1. Frame 每个视图都有一个frame属性,它是CGRect结构,它描述了视图所在的矩形在其父视图中的位置. (屏幕坐标系默认的原点在左上角,x轴向右伸展,y轴向下伸展) 设置frame通常通过视图的指定初始化器initWithFrame 下面来看个例子,该例子初始化了3个相互叠加的矩形区域 (Objective-C代码) UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(113, 111, 132, 194)]; v1.backg

IOS开发之深入坐标系frame、bounds、center、 transform的不同与联系

有疑问的请加qq交流群:390438081 我的QQ:604886384(注明来意) 微信:niuting823 1.1 frame属性 a.什么是frame 类型:CGRect结构体(size  origin) 作用:该视图左顶点在父视图的坐标系下的位置,以及该视图在父视图中占据的宽和高 b.直接修改了frame,其他属性如何变化? bounds:     会 center:       会 transform:  不会 c.什么时候使用frame 当把一个视图添加到父视图中时,一定要设定fr

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,