当前位置:首页 » 《关注互联网》 » 正文

iOS开发 frame与bounds_waxuuuu的博客

22 人参与  2021年08月23日 10:23  分类 : 《关注互联网》  评论

点击全文阅读


文章目录

  • 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改变位置时 不会影响自身 子视图的位置会发生变化 默认自身坐标系原点是左上角

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/25960.html

视图  位置  坐标系  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 沈锦殊(宠妾灭妻?虐渣高嫁我被权宠天下)前文+全本完整阅读预售作品抢先看
  • 独家周屿,林小柔,江宇城小说小说大结局(重生后,我冷眼看未婚夫小秘书给甲方爸爸送盗版labubu)全篇在线下载阅读
  • 重生后,我送渣男下地狱见阎罗王续集_苏景琛笑笑老太太听书_小说后续在线阅读_无删减免费完结_
  • 一百,解释,油漆小说(高考过后,我给擦边男主播刷了一百万)TXT无套路在线+无广告结局
  • 掏空我后,全家逼我卖婚房未删减_妹妹宝马老公番茄热门_小说后续在线阅读_无删减免费完结_
  • 纪君范,亓霏霏小说完本章节前文+全篇阅读(被小三的反击战)连载中
  • 陈春花,池言(重生后,摆脱吸血鬼老公一家)前文+全本完整阅读预售作品抢先看
  • 错认皇太女后,三个皇夫悔疯了后续结局_春桃长青魏昭看点十足_小说后续在线阅读_无删减免费完结_
  • (重生后,恶毒女配拿稳白月光剧本)江朝华燕景最终篇章(江朝华燕景)全书在线无广告高口碑小说
  • 女儿遇险命悬一线,我却见死不救后续+完结_小姑娘雷达安静读者推荐_小说后续在线阅读_无删减免费完结_
  • 黎夏林意深:结局+番外新上热文新章速递京港缠绵,他独宠娇梅:结局+番外评价五颗星
  • 陈春花,池言小说全文免费阅读(重生后,摆脱吸血鬼老公一家)全文免费阅读无弹窗_陈春花,池言小说全文免费阅读_笔趣阁

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1