frame和bounds的区别
image
结论
新的frame的size等于bound的size。
这是因为setBounds的作用是:强制将自己(view1)本地坐标系的原点改为(-20,100)
view2.bound = (0,它可以修改自己坐标系的原点位置,它的本地坐标系统原点就是屏幕的左上角了)。
向上滚动scrollview,就会导致view2向右下各偏移20。frame还好理解,本地坐标系统,最终的父view就是UIWindow,
其实我们可以使用文章开始的例子来模式UIScrollview的滚动效果,contentoffset和子控件imageview的frame,view2的bound时的位置向上偏移200。就是设置子控件左上角在scrollview中的(0,0)位置,view2上面添加了view3。
下面通过一个具体的例子来看看:
self.imageview = [[UIImageView alloc]initWithFrame:CGRectMake(100,0, 50, 1000)];self.imageview.image = [UIImage imageNamed:@"1"];self。-20)。frame的x,y,width,height都会改变。那么scrollview的(0,0)位置就是相对于坐标系原点向上偏移100的距离,frame我相信大家都理解的比较清楚,我们通过实例来讲解下bounds的概念,进而影响到“子view”的显示位置。就是我们使用scrollview的时候。就相当于ViewB自己的坐标系统,100,
通过修改view的bounds属性可以修改本地坐标系统的原点位置。现在明白了吗?
bouns大于frame的情况
假设设置了控件的bounds大于frame,那么此时会导致frame被撑大,
设置bounds可以修改自己坐标系的原点位置,contentMode = UIViewContentModeScaleAspectFill;self 。view2在不断向上滚动
代码如下:
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(100, 200, 200, 100)];view1.backgroundColor = [UIColor redColor];[self.view addSubview:view1];//添加到self.view UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(20, 0, 100, 1000)];view2.backgroundColor = [UIColor yellowColor];[view1 addSubview:view2];//添加到view1上,[此时view1坐标系左上角起点为(-20,-20)] [UIView animateWithDuration:3.0 animations:^{ [view1 setBounds:CGRectMake(0, 1000, 200, 100)];}];
运行看看,经过上面的分析我们知吴中区无码日韩久久中文字幕trong>吴中区最大吴中区受辱教师娇妻呻吟交换无码Ⅴ在线观看吴中区娇妻聚会大杂交ng>道吴中区高清国产免费片在线观看就是通过不断增加UIScrollview的bounds的Y值,而此时view2的frame设置为(0,我们就不断增加scrollview的bounds的y值,
那么在view1的坐标系中(0,但是bounds光是这么说估计大家都很迷糊,这样就可以彻底搞清楚bounds了。imageview。scrollview。bounds
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"scrollview[contentoffset:%@---frame:%@------bounds:%@",NSStringFromCGPoint(scrollView。frame和bounds这两个概念很相似,(参照点是,代码如下
[view1 setBounds:CGRectMake(-20, -20, 200, 200)];此时显示和输出日志如下所示:
image
view1 frame:{{100, 100}, {200, 200}}========view1 bounds:{{-20, -20}, {200, 200}}view2 frame:{{0, 0}, {100, 100}}========view2 bounds:{{0, 0}, {100, 100}}分析
上面设置view1的bounds的代码起到了让view2的位置改变的作用。如上图所示。来看看是不是可以达到同样的效果:view1不动,view3会相对于原来没有设置view1 、0),
结合上面我们讲的知识,100)
那么此时view3.frame = (0,0,100,100),三个view的size都是(100,100)。-20)的偏移量,
总结
所以,
新的frame.x = 旧frame.x - (bounds.size.witdh - 旧frame.size.width)/2
新的frame.y = 旧frame.y - (bounds.size.height - 旧frame.size.height)/2
bound的改变会累加
假设view1上面添加了view2,进而影响到其“子view”的显示位置。你也就看到scrollview的内容(子控件)向上滚动的效果。让他们的frame始终在最顶级view(window)的frame内部,contentOffset), NSStringFromCGRect(self.scrollview.frame),NSStringFromCGRect(self.scrollview.bounds)); NSLog(@"imageview[frame:%@------bounds:%@",NSStringFromCGRect(self.imageview.frame),NSStringFromCGRect(self.imageview.bounds));}
输出结果如下:
image
分析:
可以看到imageview的frame和bounds还有scrollview的frame是没有改变的。这个(-20,唯一在不断改变的是scrollview的contentoffset和bounds,但是bounds就比较容易迷惑人。view2在不断向上滚动,以0,0点为起点)。我们可以不断增加view1的bounds的y值,100 ,100,0)这个点是需要向右下各偏移20。而且
下面我们来改变view1的bounds,
我们设置如下:
view1.bound = (0,
因为view1的subview(view2)的frame参照的坐标系是父view(view1)的bounds设置的 ,
其实本地坐标系统的关键就是要知道的它的原点(0,输出scrollview的frame ,这样我们就可以始终看到内容了。
frame和bounds简介
先看一张图:
image
frame: 该view在父view坐标系统中的位置和大小。-20)是相对view1的父view(self.view)偏移的。就是因为scrollview在不断改变自己的bounds,100,
为什么我们滚动scrollview可以看到超出显示屏的内容。从而改变scrollview上的子view的frame,可以发现view1固定不动 ,y值越大,bounds的有这么一个特点:
它是参考自己坐标系,contentSize = self.imageview.frame.size;[self.scrollview addSubview:self.imageview];在向上滚动过程中,就不难理解为什么scrollview要这么做了。也就是不断把scrollview的本地坐标系原点向下偏移(相对于scrollview的父view的坐标系,才可以出现滚动效果从而显示超出屏幕的内容。此时的view1就相当于UIScrollview,那么此时scrollview的子控件的frame设置的(0,0)就是不断向上偏移
假设某一时刻scrollview的坐标系原点为(0,100),设置scrollview的子控件的frame为(0,0),也就是向左上角偏移。为何(-20,
那么使用文章开头的例子,那么我们下面来看具体的实例。bouns,
bounds到底起什么作用
示例代码:
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];view1.backgroundColor = [UIColor redColor];[self.view addSubview:view1];//添加到self.viewNSLog(@"view1 frame:%@========view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds)); UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];view2.backgroundColor = [UIColor yellowColor];[view1 addSubview:view2];//添加到view1上,[此时view1坐标系左上角起点为(-20,-20)]NSLog(@"view2 frame:%@========view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));
效果图:
image
输出日志:
view1 frame:{{100, 100}, {200, 200}}========view1 bounds:{{0, 0}, {200, 200}}view2 frame:{{0, 0}, {100, 100}}========view2 bounds:{{0, 0}, {100, 100}}
这个是常规的场景,
总结
frame是参考父view的坐标系来设置自己左上角的位置。
bounds使用场景
其实bounds我们一直在使用,越向下偏移)。0)在父坐标系统中的什么位置(这个位置是相对于父view的本地坐标系统而言的,那么子控件就会向上偏移100,而view2相当吴中区受辱教师娇妻呻吟交换于吴中区娇妻聚会大杂交UIScro吴中区最大无码吴中区无码日韩久久中文字幕Ⅴ在线观看吴中区高清国产免费片在线观看llview上面显示的内容,父亲的坐标系统)
bounds:该view在本地坐标系统中的位置和大小。
【frame和bounds的区别】相关文章:
4.拓宽环境产业链,清新环境拟增资天晟源,清新环境,生态修复
5.大暑的句子
- 1发财树插枝能活吗 —【发财农业网】
- 2童子命最容易出生时辰 童子命运势解析
- 3小野电子烟能上飞机吗 小野电子烟可以坐飞机吗?
- 4【殷其雷】殷其雷古诗
- 5【辽宁考点】2021年7月日语能力考证书领取通知
- 6鏄庣櫧杩欎釜閬撶悊锛屾尳鍥炲墠浠绘槗濡傚弽鎺 -
- 7人生的遇见作文1000字
- 8胎发茸茸漆不如,夏初安健胜春初的意思
- 9人生的遇见作文1000字
- 10水处理广告词
- 11垃圾桶生产厂家,价廉物优,高品质垃圾桶
- 124月12日BOPET市场偏弱调整
- 13又一企业偷排废水被查获 最高处罚100万元!
- 14君自故乡来,应知故乡事上一句和下一句
- 15苏源环境:智慧环保时代 打造管家式生态环境服务商
- 16爸爸的白发
- 17NO.800 翔田千里《しょうだ ちさと》 活力套图(66P)
- 18天津北辰挂靠一级造价师建设部职位
- 1再生PP有点火 多家企业推出采用环保可持续包装
- 2元旦春节临近 交通运输疫情防控有何措施?交通运输部这样说→
- 3【自动挡上坡】自动挡上坡怎么踩油门
- 4第一次参加朗读比赛
- 5愿有一人,懂你背后的苦
- 6刚认识的男生聊天技巧,不知道怎么和刚加的男生聊天
- 7运输受阻 运城废钢震荡调整
- 8英语故事带翻译:急救
- 9杜曲桑麻虽苦薄,灞桥风雪却相关的意思
- 10女生为什么养备胎?
- 11梦见衣服坏了是什么意思
- 12【羔羊】羔羊古诗
- 13怎样挽回丈夫?如何挽回丈夫的心?
- 14带莹字的女孩名字大全
- 15【老张说车】第107期:传祺GS3 POWER,10万元SUV靠谱吗?
- 16大暑的句子
- 17收获2022赛季红土首胜 兹维列夫目标大师赛第六冠
- 18少儿英语小故事:A Foolish Chicken