IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS开发 frame与bounds -> 正文阅读

[移动开发]iOS开发 frame与bounds

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改变位置时 不会影响自身 子视图的位置会发生变化 默认自身坐标系原点是左上角
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:14:29  更:2021-08-20 15:14:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:02:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码