美文网首页iOS学习笔记
frame与bounds不一样会出现什么问题?

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

作者: ANYWAY安尼维 | 来源:发表于2017-01-12 17:21 被阅读0次

    小记:

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

    正文:

    当我将一个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不一样会出现什么问题?

        本文链接:https://www.haomeiwen.com/subject/gotjbttx.html