zoukankan      html  css  js  c++  java
  • iOS中控件的Frame属性和Bounds属性的区别

    转自:http://www.cnblogs.com/wisejoker/p/3574889.html

    在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性

    frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)其中的坐标是我的左上角坐标相对于我的父视图左上角的坐标。如果我修改坐标,x+50,y+50,那么我就会相对于我的父视图移动,相对于父视图,我向右移动50,向下移动50

    bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐标系统)其中的坐标是我的子视图左上角的坐标相对与我的左上角的坐标。如果我修改坐标,x+50,y+50,那么我的子视图就会相对我进行移动,相对于我,子视图向左移动50,向上移动50

    -(CGRect)frame{

        returnCGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);

    }

    -(CGRect)bounds{

        returnCGRectMake(0,0,self.frame.size.width,self.frame.size.height);

    }

    实际使用情况是这样的:

    1.如果我在a视图,我需要在a视图下创建一个子视图b,并规定b视图相对于a视图的坐标和大小,使用Frame即可,不需要对Bounds做任何操作

        UIView * a;

        UIView * b;

        [a addSubview:b];

        

        b.frame = CGRectMake(100100100100);

    2.如果我在b视图,我是a视图的子视图,我想要修改我自己的大小,但是我又不想知道我相对于a视图的坐标,那就使用Bounds,origin都设为0

        b.bounds = CGRectMake(005050);

    3.如果我在b视图,我是a视图的子视图,我想要重新设计我的视图的坐标,方便我创建我的自己的子视图时的坐标转换,那么我就可以设置Bounds,origin的大小就是我左上角的坐标,我再创建的子视图就会以我的这个坐标来进行参照坐标

        b.bounds = CGRectMake(-50, -50, b.bounds.size.width, b.bounds.size.height);

    4.如果我是b视图,我的视图旋转了,我的Frame和Bounds就会演变成下面的样子

    NewImage

    以上所述的1和2场景比较常见,其它场景都是及其少见,如果你想修改坐标,就使用Frame,如果你想修改大小,就使用Bounds

  • 相关阅读:
    为什么我的从任务管理器中看见我的硬盘使用率是100%(2)
    为什么我的从任务管理器中看见我的硬盘使用率是100%(1)
    win8正式版
    pwnable_orw
    cmcc_simplerop
    分析kernel.dll函数CreateRemoteThread进0环
    [V&N2020 公开赛]easyTHeap
    恶意代码分析训练第一天
    SWPUCTF_2019_p1KkHeap
    3环函数进入0环函数
  • 原文地址:https://www.cnblogs.com/wangpei/p/3605473.html
Copyright © 2011-2022 走看看