IOS开发入门之frame,boundes
白羽 2018-11-13 来源 :网络 阅读 405 评论 0

摘要:本文将带你了解IOS开发入门frame,boundes,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门frame,boundes,希望本文对大家学IOS有所帮助。



        

在ios开发中,我们经常会用到frame,通过设置一个控件的frame来给控件安排位置,对于bounds我们几乎没怎么用过,那么都是CGRect的结构体,但是他们又有什么区别呢,稍安勿躁,请往下看:

真理

区别

frame:

 

是相对坐标.
 是以父控件的坐标系作为参考的.
 而且父控件的frame的改变不会影响父控件与子控件之间的布局.

bounds:

 

是绝对坐标.
 是以自身的坐标系作为参考的
 父控件的bounds变了,会影响子控件在父控件上的布局

实践

frame测试:两个view分别是红色的view1,白色的view2,view2被加在了view1上,添加一个定时器:每隔一秒改变view1也就是父控件的frame的纵坐标

 

请相信我这是真的结果,但是代码太简单,就不贴了

结果如下
1:43分

1.44分

总结,虽然经过了一分钟,但是他们还是像最初一样,没有任何改变

bounds测试:两个view分别是红色的view1,白色的view2,view2被加在了view1上,添加一个定时器:每隔一秒改变view1也就是父控件bounds的纵坐标

代码如下

static CGFloat hh = -10;@implementation ViewController-(void)viewDidLoad{    [super viewDidLoad];    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {        hh -=10;        self.view1.bounds= CGRectMake(0, hh, 300, 300);    }];    UIView*view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];    view1.backgroundColor = [UIColor redColor];    [self.view addSubview:view1];    self.view1 = view1;    UIView*view2 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];    view2.backgroundColor = [UIColor yellowColor];    [view1 addSubview:view2];    self.view2 = view2;}

结果如下


总结:我们明显看到父控件和子控件的布局发生了改变,但是父控件的纵坐标明明在减,但是越往下,纵坐标越大呀,下来我们来解释

 

对于父坐标来说,我把bounds设置成了下面这样
 self.view1.bounds= CGRectMake(0, -10, 300, 300);
 因为子控件设置了frame是是相对于父坐标系的,现在子控件为了找到父控件的0,就需要给-10+10,所以就可以看到,当父坐标的boundes一直在减少,为了抵消,那么子控件的纵坐标就回越来越大,这样就会看到他一直往下跑

还有,bounds和frame的相互影响:

 

当bounds的size<=frame的size的时候,那么frame就放的下bounds
 当bounds的size>frame的size的时候,frame就会被bounds撑大。

bounds的应用

我们之所以能看到scrollerView屏幕以外的东西,其实就是scrollerView的bounds在不断地改变,contentOffset也不断改变,bounds和contentOffset的size大小一样。

          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程