iOS开发 frame与bounds
文章目录
- 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相关推荐
- iOS开发——frame和bounds详解
在iOS的UI开发中,frame和bounds是两个非常容易搞混的概念,而很多开发者在实际项目中也很少去区分,因此会导致出现一些意想不到的问题.本篇博客以实际代码的方式来学习frame和bounds的 ...
- [iOS开发]frame和bounds
简述 Frame: 视图的位置和大小使用是父视图的坐标系,所以将视图放置在父级中这一点就很重要. Bounds:视图的位置和大小,使用的是其自己的坐标系,而对于这一点而言将视图的内容或子视图放置在其自 ...
- iOS中frame和Bounds之间的区别
frame frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的.位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有他特有 ...
- ios视图frame和bounds的对比
子视图实际位置=父视图实际位置-父视图bounds坐标+子视图frame坐标 一.bounds 只影响"子视图"相对屏幕的位置,修改时不会影响自身相对屏幕的位置 bounds坐标: ...
- IOS UiView frame哪里来?
初学ios开发,frame center bounds 一直搞不清楚.最近在看wwdc session 121 UIKit Rendering 找到答案. frame 是计算属性 frame定义是父视 ...
- iOS开发UI基础—手写控件,frame,center和bounds属性
iOS开发UI基础-手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...
- iOS开发UI篇—手写控件,frame,center和bounds属性
一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...
- iOS开发-View中frame和bounds区别
开发中调整View的时候的经常会遇到frame和bounds,刚开始看的时候不是很清楚,不过看了一下官方文档,frame是确定视图在父视图中的位置,和本身的大小,bounds确定可以确定子视图在当前视 ...
- (0046) iOS开发之View的frame和bounds之解惑
iOS view的frame和bounds之解惑 frame: 该view在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小.(参照 ...
- ios 设置属性的center_ios-坐标系统(详解UIView的frame、bounds跟center属性[图])
1.概要 翻开ios官方开发文档,赫然发现上面对这三个属性的解释如下: frame:描述当前视图在其父视图中的位置和大小. bounds:描述当前视图在其自身坐标系统中的位置和大小. center:描 ...
最新文章
- c语言全局变量符号,C语言中的 @ 符号是什么意思?
- 机器人学习--有参考意义的视频
- python中calendar模块常用方法_Python的time模块中的常用方法整理
- 使用Dapper持久化IdentityServer4
- 统计学第二章--感知机
- SpringBoot :cannot be cast to org.springframework.web.accept.ContentNegotiationManager
- django 安装/部署过程
- css用边框实现圆角矩形
- Android Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10 in tid 5287 (HeapTaskDaemo
- 如何解决第三方JavaScript引入工程后报错
- hive窗口函数和hive基础使用
- 保定工程技术学校网络计算机,保定工程技术学校2021年有哪些专业
- switch可以用什么手柄_steam设置switch手柄的步骤_Steam平台可以用switch良值pro手柄吗_怎么设置_9号资讯...
- c.cnzz.com core.php,谷歌浏览器下cnzz统计代码报错被拦截
- 吴恩达-机器学习-简单决策树
- 计算机专业需要学习打字吗,电脑学习打字的最快方法是什么
- 2022年茶艺师(中级)考试题库模拟考试平台操作
- chrome 插件个人使用推介
- Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成 1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对
- qt学习笔记(八)之深入QSqlQuery