做iOS开发有一段时间了,今天整理物品,发现之前的稿纸,关于frame和bounds属性的,发现当初bounds属性怎么也想不明白,做了几个demo反而更懵了,好像绕进死胡同里。今天也和大家一起分享一下,希望可以帮助一时还么有转过来的朋友,也希望大家一起交流一下当初是如何理解的。

好了,言归正传,先看一下苹果官网是如何解释这两个属性的:


可以看到,frame属性是指view在父试图坐标系统的大小和位置。bounds属性是指试图在自己本地坐标系统的大小(和内容的原点)。对于frame都是很好理解的,关键在于对于bounds的理解。

我们先看一下iOS系统的坐标系统:

UIKit默认的坐标系统原点在左上角,x轴向右,y轴向下。然后,我们一起看一个例子:

此时关于frame和bounds都还可以理解的。但是,如果这个时候修改控制器view的bounds属性,例如:此时将控制器view的bounds属性修改为

[ setBounds:CGRectMake(20, 20, .bounds.size.width, .bounds.size.height)];

此时,再次运行,发现图片会向左上移动了,而不是像右下移。这应该是最难理解的,也是在初学时候最百思不得其解的地方。原因还是在bounds属性,因为它是相对本地坐标系统而言的,参照的是自身的坐标系统,而图片在view中的位置由它的frame决定,图片的frame没有改变。如图:

红色坐标表示修改之前的的bounds属性,默认的原点是 (0, 0) 点。蓝色表示修改之后的坐标系统,由于修改了bounds,此时图片的位置在本地的坐标位置是(20,20)了,而图片的frame属性没有变,他相对于父视图的坐标是(40,40),此时他参考的是蓝色坐标系统,此时的坐标位置(40,40)在红色坐标系统(原先bounds坐标系统)中的(20,20)的位置了。所以,感觉图片是向左上移动了。而实际上也的确应该是这样的。

现在看来很好理解,不知道当初是为什么转不过这个弯来,查了很多资料,仍然不理解,都开始怀疑自己是不是适合这个行业了,不知道大家当初是如何理解的,聪明的你是不是一下子就理解了?

1.《ios如何修改cgrect》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《ios如何修改cgrect》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3245934.html