frame与bounds不一样会出现什么问题?

小记:

作为一只菜鸡,每每有问题,第一时间都会想着去问问度娘,找找之前的前辈的手札来学习,但是有时候,在学习时给自己几分钟追根究底却很有意思!

正文:

当我将一个view的frame和bounds设置不同的时候模拟器跑出了很有意思的结果,如下:

原始:frame(100,100,200,200)                  bounds(0,0,500,500)

结果:frame(-50,-50,500,500)                 bounds(0,0,500,500)

其中变化了两个点:1.大小,2.坐标

大小的变化好理解,bounds是对自身的设置,frame是相对父视图的设置,所以,最终大小是由bounds来决定,当然如果没有bounds设置,frame就决定了大小.

那么坐标为什么变的这么畸形呢?网上稍微百度,靠前的答案并没有给出解释,只是说bounds会对frame的坐标和大小会有影响,但是影响从何而来,并不得而知.

我换了几组数据来总结规律;

原始:frame(100,100,200,200)                  bounds(0,0,250,250)

结果:frame(75,75,250,250)                 bounds(0,0,250,250)

没感觉.再来!

原始:frame(100,100,500,500)                  bounds(0,0,200,200)

结果:frame(250,250,200,200)                 bounds(0,0,200,200)

有点意思了,我决定再来一组.

原始:frame(100,100,250,250)                  bounds(0,0,200,200)

结果:frame(125,125,200,200)                 bounds(0,0,200,200)

其实数据只为求证而用,我写这么多,是觉得有疑问的可以自己试试;那么思路来了!既然位置变了,那么决定位置的因子或是因素是什么呢?frame中有一个center的概念,center 是相对父视图的位置;而这个center也许就是决定位置的关键.

我们不妨这样理解,本来frame的center在(0,0),现在size变化了,而center没变.那么坐标不就变化了吗?

那么我们来计算一下是不是center的原因;我拿其中一组举例:

原始:frame(100,100,200,200)                  bounds(0,0,500,500)

结果:frame(-50,-50,500,500)                 bounds(0,0,500,500)

frame的center的坐标是(100 + 200 / 2,100 + 200/2)即(200,200),现在size改变了,如果中心点没变,那么

frame.origin,x = 200 - 500 / 2 = 中心x - width/2 = -50

frame.origin.y = 200 - 500 / 2 = 中心y - height/2 = -50

刚好是frame与bounds大小不一时,位置发生变化后的数据;为了证明它,我于是又多算了其他的数据,发现都是如此.

于是我们可以得到以下结论:当frame和bounds不一样的时候,对象的size由bounds决定,而对象的位置由frame的center位置和变化后的size算出.

你可能感兴趣的:(frame与bounds不一样会出现什么问题?)