美文网首页
frame和bounds的区别

frame和bounds的区别

作者: CoderLWG | 来源:发表于2020-03-06 15:53 被阅读0次

1、frame和bounds的区别

UIView的布局属性包括:frame、bouns、center,分别对应了CALayer中frame、bounds、position。为了能清楚区分,图层用了position,视图用了center,但它们都代表了同样的值。

UIView属性 CALayer属性 属性说明
frame frame 表示相对于其父视图的坐标位置
bounds bounds 表示相对于其自身的坐标位置,{0,0}通常是其左上角
center position 相对于父图层锚点AnchorPoint所在位置
image.png

上图对原有视图做了旋转变换,之后的frame实际上代表了覆盖在图层旋转之后的整个轴对齐的矩形区域,此时frame的宽和高和bounds不再一致了。

其实,对于视图和图层来说,frame是根据bounds、position、和transform计算而来的;所以当其中的任何一个值发生变化时,frame就会发生变化,相反改变frame也同样影响他们当中的值。

2、中心点(position)与锚点(anchorPoint)
position是当前layer的anchorPoint在superLayer中的位置。

我们也可以更确切理解为:position是相对于superLayer来讲,而anchorPoint是相对于当前layer来讲;只不过在默认情况下,anchorPoint与position是重合的;锚点是用单位坐标来描述的(即图层的相对坐标),图层的左上角是{0,0},右下角是{1,1},因此图层的默认锚点是{0.5, 0.5},表示图层的中间位置代表了其位置position。

下面的图示是将锚点从{0.5,0.5}改为了{0,0},我们在这里更容易看到position与anchorPoint之间的关系:


image.png
position.x = frame.origin.x + 0.5 * bounds.size.width;  
position.y = frame.origin.y + 0.5 * bounds.size.height; 

这里的0.5参数,其实就是由于锚点默认值得到的,所以改进公式如下:

position.x = frame.origin.x + anchorPoint.x * bounds.size.width;  
position.y = frame.origin.y + anchorPoint.y * bounds.size.height;

修改position与anchorPoint中任何一个属性都不能影响另一个属性,由此我们也可以再次改进公式

frame.origin.x = position.x - anchorPoint.x * bounds.size.width;  
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;

最后得出结论:frame的origin坐标由position与anchorPoint来共同决定;

3.锚点的作用
锚点就相当于一个支点,可以形象的理解为一颗固定了图层的图钉,尤其是我们在做旋转动画时,可能会需要设置此属性来决定图层是围绕哪一个点旋转的。

相关文章

  • iOS纪录

    (1)View的Frame与Bounds区别 摘自 ios view的frame和bounds之区别(位置和大小)...

  • 深入探究frame和bounds的区别以及setbounds使用

    深入探究frame和bounds的区别以及setbounds使用 深入探究frame和bounds的区别以及set...

  • iOS 面试题目

    1、iOS frame和Bounds 以及frame和bounds区别2、 ios webView 加载HTML字...

  • #1 布局相关的问题集合

    1.frame 和 bounds的区别 what's the difference bewteen frame a...

  • UI基础相关

    UI基础相关: Frame 和 bounds的区别:Frame是参照父控件的 bounds是参照自己的 默认是(0...

  • frame和bounds区别

    1、frame不管对于位置还是大小,改变的都是自己本身 2、frame的位置是以父视图的坐标系为参照,从而确定当前...

  • iOS~ frame 和 bounds 的区别和联系

    推荐文章Understanding UIScrollView 1、 frame 和 bounds 的区别和联系 f...

  • bounds和frame的区别

    此情况下,在view.bounds = CGRectMake(x, y, W, H)中,无论x、y怎么设置最后打印...

  • frame 和 bounds 的区别

    frame frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的。 b...

  • frame和bounds的区别

    frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统) bounds:该view...

网友评论

      本文标题:frame和bounds的区别

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