你真的明白frame和bounds了吗

前言

也许你做ios开发已经有些年了,也许你才刚刚开始加入ios开发大军,大神也好,小白也好,而下面两行代码,也许是我们敲的最想吐的几行代码之一:

 self.XXView.frame = CGRectMake(0, 0, 100, 100);
 self.XXView.bounds = CGRectMake(0, 0, 100, 100);

一个设置坐标,一个设置边框,这两行我们重复了无数遍的代码,你果真搞清楚了他们之间的区别吗?(已懂的大神请自行return)

我们都知道

frame:决定一个视图在它父视图上的显示区域和大小,以父视图左上角为原点(0,0)
bounds:以自己左上角为原点(0,0),并可以设置自身尺寸大小。

好像我们了解的就仅止于此了

我们现有的开发在使用bounds好像总有一条神秘的命令指挥着我们:CGRect的(x、y)一定要为(0,0),否则便会有不好的事情的发生

//我们一直都在这么做,却不知道为什么
self.XXView.bounds = CGRectMake(0, 0, 100, 100);

事实上,你如果不设为(0,0),确实有不好的事情发生。我们用如下代码验证:

   //创建红色view
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
    //设置bounds,x,y分别为20,20,宽高不变
    redView.bounds = CGRectMake(20, 20, 200, 200);
    redView.backgroundColor = [UIColor redColor];
    //把红色view添加到控制器view上
    [self.view addSubview:redView];
    
    //创建紫色view
    UIView *purpleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
    purpleView.backgroundColor = [UIColor purpleColor];
    //把紫色view添加到红色view上
    [redView addSubview:purpleView];

运行页面结果如下:

imgae1.png

我们会看到:紫色view的frame(x,y)虽然设为(0,0),但它的左上角却不在父视图左上角,而是偏离出父视图外面去了

为什么,我们只是改变了bounds的x、y而已

好吧,是时候再给bounds做一层注释了:

bounds决定了本地坐标系统的位置和大小

这句话怎么理解呢?
1、我们知道,坐标系最重要的是确定原点(0,0),以哪里为原点才能知道一个view的左上角从哪里开始摆放。
2、view本地坐标系就是它自身的坐标系,这个坐标系是相对于它的子视图而言,即本地坐标系作用于子视图。bounds的x,y决定本地坐标系的坐标原点,系统默认为(0,0)。
3、上面红色view的bounds(x,y)设为了(20,20),也就是它的坐标原点变成了(20,20)。
4、通俗一点的理解,子视图若要处于红色view左上角原点位置,那么它frame的(x,y)要为(20,20)。但是紫色view的(x,y)被设为了(0,0),所以我们要找到坐标系(0,0)位置。即在原点处,向左移动20,向上移动20,就是(0,0)位置。比较绕,请参照下图理解:

image2.png

上面只是改变了bounds的x和y,若width和height也改呢

我们用代码作如下验证:

  //创建红色view
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
    //打印此时的frame
    NSLog(@"log1:%@",NSStringFromCGRect(redView.frame));
    //设置bounds,x,y分别为20,20,宽高为300,300
    redView.bounds = CGRectMake(20, 20, 300, 300);
    //打印设置完bounds后的frame
     NSLog(@"log2:%@",NSStringFromCGRect(redView.frame));
    redView.backgroundColor = [UIColor redColor];
    //把红色view添加到控制器view上
    [self.view addSubview:redView];

打印结果:

2016-08-23 10:52:30.926 frame和bounds区别[1038:38905] log1:{{50, 100}, {200, 200}}
2016-08-23 10:52:30.927 frame和bounds区别[1038:38905] log2:{{0, 50}, {300, 300}}

我们会发现:review的frame不仅width、height变了,x,y也变了,从之前的(50,100),变成了(0,50),x、y都减少了50。

由此我们知道,改变bounds的width和height,不仅会影响frame的width和height(两者的width和height保持一致),还会影响frame的x,y。这种影响是随着bounds的width和height增加或减少,平均扩充或缩减四周的区域。

用上面的例子解释,bounds宽高都增加了100,所以会向四周平均扩充区域,在原来的基础上,往上、往下、往左、往右各扩充50,所以x、y都会减少50。

总结

bounds的有以下两个特点:

1. 它可以修改自己坐标系的原点位置,影响“子view”的显示位置。

2. bounds,它可以通过改变宽高,改变自身的frame,进而影响到再父视图的显示位置和大小。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容