文章目录

  • iOS坐标系
  • frame
  • bounds
    • 只改变size
    • 只改变origin
  • 总结

iOS坐标系

frame和bounds都属于CGRect类型的结构体

struct CGRect {CGPoint origin;CGSize size;
};
typedef struct CGRect CGRect;

包含一个CGPoint(起点)结构体跟一个CGSize(尺寸)结构体

struct CGPoint {CGFloat x;CGFloat y;
};
typedef struct CGPoint CGPoint;struct CGSize {CGFloat width;CGFloat height;
};
typedef struct CGSize CGSize;

注意
CGRect数据类型的高度和宽度可以是负数
例如
一个矩形的大小是[10, 10]
完全等同与大小是[-10, -10]的矩形

frame

frame是UIView的属性 用来描述UIView及其子类所表示的视图的位置(origin)和大小(size)

在仅使用frame来布局视图时
视图的位置和大小是被唯一确定了的 不会跟随父视图的变化而变化
除非在某个时间点在此设置了frame

frame表示view在父视图坐标系统中的位置和大小
参考坐标是父视图的坐标系统

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIView *viewA = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];viewA.backgroundColor = [UIColor blueColor];[self.view addSubview:viewA];UIView *viewB = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];viewB.backgroundColor = [UIColor redColor];[viewA addSubview:viewB];UIView *viewC = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];viewC.backgroundColor = [UIColor yellowColor];[viewB addSubview:viewC];
}

虽然3个view的起点都是[50, 50]
但是由于每个view的父视图不同
导致了显示出来的位置也不同

这就可以看出来frame的位置是根据父视图的坐标来确定的

bounds

The bounds rectangle, which describes the view’s location and size in its own coordinate system.

根据苹果官方文档 bounds是控件相对于其自身坐标系得出的位置和大小

只改变size

更改bounds的大小 bounds的大小代表当前视图的长和宽
当前视图的中心点保持不变 长宽进行改变
看起来像以中心点为基准点对长宽两边同时进行缩放

viewA.bounds = CGRectMake(0, 0, 100, 100);

添加这一句之后
下面是对照组 就是之前的样子

可以看出
之间蓝色视图的中心在黄色视图的左上角尖尖那里
就是根据那个中心来进行缩放的

并且也同时改变了子视图的位置

只改变origin

更改bounds中的位置不会对本视图产生影响 但是会影响子视图的位置
因为这更改了当前视图的坐标系
对应子视图来说 当前视图的左上角已经不再是[0, 0] 而是更改之后的坐标

viewA.bounds = CGRectMake(50, 50, 200, 200);

这次是加这一句

蓝色视图的位置并没有改变
而是改变了两个子视图的位置

总结

  • frame不管改变位置还是大小 都会影响自己
  • frame以父视图的坐标系作为参考 从而确定当前视图在父视图的位置
  • frame和bounds在改变大小的时候 frame的基准点是左上角 bounds的基准点是中心点
  • bounds改变位置时 不会影响自身 子视图的位置会发生变化 默认自身坐标系原点是左上角

iOS开发 frame与bounds相关推荐

  1. iOS开发——frame和bounds详解

    在iOS的UI开发中,frame和bounds是两个非常容易搞混的概念,而很多开发者在实际项目中也很少去区分,因此会导致出现一些意想不到的问题.本篇博客以实际代码的方式来学习frame和bounds的 ...

  2. [iOS开发]frame和bounds

    简述 Frame: 视图的位置和大小使用是父视图的坐标系,所以将视图放置在父级中这一点就很重要. Bounds:视图的位置和大小,使用的是其自己的坐标系,而对于这一点而言将视图的内容或子视图放置在其自 ...

  3. iOS中frame和Bounds之间的区别

    frame frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的.位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有他特有 ...

  4. ios视图frame和bounds的对比

    子视图实际位置=父视图实际位置-父视图bounds坐标+子视图frame坐标 一.bounds 只影响"子视图"相对屏幕的位置,修改时不会影响自身相对屏幕的位置 bounds坐标: ...

  5. IOS UiView frame哪里来?

    初学ios开发,frame center bounds 一直搞不清楚.最近在看wwdc session 121 UIKit Rendering 找到答案. frame 是计算属性 frame定义是父视 ...

  6. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础-手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  7. iOS开发UI篇—手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  8. iOS开发-View中frame和bounds区别

    开发中调整View的时候的经常会遇到frame和bounds,刚开始看的时候不是很清楚,不过看了一下官方文档,frame是确定视图在父视图中的位置,和本身的大小,bounds确定可以确定子视图在当前视 ...

  9. (0046) iOS开发之View的frame和bounds之解惑

    iOS view的frame和bounds之解惑 frame: 该view在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小.(参照 ...

  10. ios 设置属性的center_ios-坐标系统(详解UIView的frame、bounds跟center属性[图])

    1.概要 翻开ios官方开发文档,赫然发现上面对这三个属性的解释如下: frame:描述当前视图在其父视图中的位置和大小. bounds:描述当前视图在其自身坐标系统中的位置和大小. center:描 ...

最新文章

  1. c语言全局变量符号,C语言中的 @ 符号是什么意思?
  2. 机器人学习--有参考意义的视频
  3. python中calendar模块常用方法_Python的time模块中的常用方法整理
  4. 使用Dapper持久化IdentityServer4
  5. 统计学第二章--感知机
  6. SpringBoot :cannot be cast to org.springframework.web.accept.ContentNegotiationManager
  7. django 安装/部署过程
  8. css用边框实现圆角矩形
  9. Android Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10 in tid 5287 (HeapTaskDaemo
  10. 如何解决第三方JavaScript引入工程后报错
  11. hive窗口函数和hive基础使用
  12. 保定工程技术学校网络计算机,保定工程技术学校2021年有哪些专业
  13. switch可以用什么手柄_steam设置switch手柄的步骤_Steam平台可以用switch良值pro手柄吗_怎么设置_9号资讯...
  14. c.cnzz.com core.php,谷歌浏览器下cnzz统计代码报错被拦截
  15. 吴恩达-机器学习-简单决策树
  16. 计算机专业需要学习打字吗,电脑学习打字的最快方法是什么
  17. 2022年茶艺师(中级)考试题库模拟考试平台操作
  18. chrome 插件个人使用推介
  19. Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成  1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对
  20. qt学习笔记(八)之深入QSqlQuery

热门文章

  1. Java笔记16 网络编程
  2. httpwatch9.1 安装包
  3. glm-0.9.9.7 + visual studio 2019 + window10下载安装
  4. zabbix离线安装
  5. 分享 百度网盘搜索引擎原理以及实现部分源码
  6. 狂神说Swagger笔记
  7. Linux Cpuidle介绍
  8. OPPO,ViVO手机锁屏下弹出来电界面
  9. java 生成word 分页,jsp转word + 分页
  10. 倪光南回应方舟CPU失败论,企业失败不等于技术失败