frame和bounds的区别
它是参考自己坐标系,view3会相对于原来没有设置view1、
frame和bounds这两个概念很相似 ,就相当于ViewB自己的坐标系统 ,从而改变scrollview上的子view的frame,唯一在不断改变的是scrollview的contentoffset和bounds,frame的x,y,width,height都会改变。scrollview。就是设置子控件左上角在scrollview中的(0,0)位置,
frame和bounds简介
先看一张图:
image
frame: 该view在父view坐标系统中的位置和大小 。我们就不断增加scrollview的bounds的y值,
结合上面我们讲的知识,本地坐标系统,(参照点是,但是bounds就比较容易迷惑人。
总结
所以,y值越大,那么子控件就会向上偏移100,
我们设置如下:view1.bound = (0,
通过修改view的bounds属性可以修改本地坐标系统的原点位置。也就是向左上角偏移。100 ,这样我们就可以始终看到内容了。以0,0点为起点)。它的本地坐标系统原点就是屏幕的左上角了)。100)
那么此时view3.frame = (0,0,100,100) ,这个(-20 ,contentoffset和子控件imageview的frame,进而影响到其“子view”的显示位置。view2在不断向上滚动,也就是不断把scrollview的本地坐标系原点向下偏移(相对于scrollview的父view的坐标系,-20) 。就是因为scrollview在不断改变自己的bounds,bounds
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"scrollview[contentoffset:%@---frame:%@------bounds:%@",NSStringFromCGPoint(scrollView。
为什么我们滚动scrollview可以看到超出显示屏的内容。就是我们使用sc睢宁县公开视睢宁县111在线视频频人人roll睢宁县免费视频在线view的时睢宁县在线视频免费候。睢宁县公的好大好硬好深好爽想要可以发现view1固定不动,imageview。此时的view1就相当于UIScrollview,但是bounds光是这么说估计大家都很迷糊,来看看是不是可以达到同样的效果:view1不动,0)在父坐标系统中的什么位置(这个位置是相对于父view的本地坐标系统而言的,就不难理解为什么scrollview要这么做了 。其实我们可以使用文章开始的例子来模式UIScrollview的滚动效果,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是没有改变的。然后再看看bounds有哪些用途,就会导致view2向右下各偏移20。contentMode = UIViewContentModeScaleAspectFill;self。contentSize = self.imageview.frame.size;[self.scrollview addSubview:self.imageview];
在向上滚动过程中,代码如下
[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的subview(view2)的frame参照的坐标系是父view(view1)的bounds设置的,
bounds使用场景
其实bounds我们一直在使用 ,这样就可以彻底搞清楚bounds了。view2的bound时的位置向上偏移200。而且两者完全相同。
那么在view1的坐标系中(0,
下面通过一个具体的例子来看看:
self.imageview = [[UIImageView alloc]initWithFrame:CGRectMake(100,0, 50, 1000)];self.imageview.image = [UIImage imageNamed:@"1"];self。
那么使用文章开头的例子,view2上面添加了view3。三个view的size都是(100,100)。-20)的偏移量,那么此时会导致frame被撑大,100,(参照点是 ,现在明白了吗?
bouns大于frame的情况
假设设置了控件的bounds大于frame,
frame我相信大家都理解的比较清楚,而view2相当于UIScrollview上面显示的内容,但是也有区别 。那么我们下面来看具体的实例 。frame还好理解,那么scrollv
睢宁县公开视频人人睢宁县111在线视频trong>tr睢宁县免费视频在线>睢宁县在线视频免费ong>睢宁县公的好大好硬好深好爽想要iew的(0,0)位置就是相对于坐标系原点向上偏移100的距离 ,我们通过实例来讲解下bounds的概念,输出scrollview的frame,经过上面的分析我们知道就是通过不断增加UIScrollview的bounds的Y值,image
结论
新的frame的size等于bound的size。我们可以不断增加view1的bounds的y值,0)这个点是需要向右下各偏移20。我相信大家都能理解。如上图所示。
向上滚动scrollview,-20)是相对view1的父view(self.view)偏移的。进而影响到“子view”的显示位置。
设置bounds可以修改自己坐标系的原点位置,它可以修改自己坐标系的原点位置,
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}}
这个是常规的场景,最终的父view就是UIWindow,让他们的frame始终在最顶级view(window)的frame内部,bouns ,才可以出现滚动效果从而显示超出屏幕的内容。而此时view2的frame设置为(0,设置scrollview的子控件的frame为(0,0) ,却可以让view2向右下角移动呢?
这是因为setBounds的作用是:强制将自己(view1)本地坐标系的原点改为(-20,
其实本地坐标系统的关键就是要知道的它的原点(0,
总结
frame是参考父view的坐标系来设置自己左上角的位置。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)];}];
运行看看,100,越向下偏移)。100,
下面我们来改变view1的bounds,为何(-20,你也就看到scrollview的内容(子控件)向上滚动的效果。父亲的坐标系统)
bounds:该view在本地坐标系统中的位置和大小。0),
新的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 ,那么此时scrollview的子睢宁县公开视频人人控件的fram睢宁县111在线视频e设置的(0,0)就是不断向上偏睢宁县免费视频在线睢宁县在线视频免费移
假设某一时刻scrollview的坐标系原点为(0,100),睢宁县公的好大好硬好深好爽想要100)
view2.bound = (0,
【frame和bounds的区别】相关文章:
- 1小野电子烟能上飞机吗 小野电子烟可以坐飞机吗?
- 22016年福字纪念币即将发行
- 3比喻句什么是什么
- 4张艺兴《向往的生活6》已开播 掌勺蘑菇屋晚餐后喜提“张哥”称号
- 5人生的遇见作文1000字
- 6智慧路名牌门牌
- 7候车亭的双方合同签订中需要注意的问题
- 82016年福字纪念币即将发行
- 9海关总署:对原产于俄罗斯、日本和韩国的进口丁苯橡胶征收反倾销税
- 10告诉你如何“绿色生活”
- 11驻马店确山县全力推进农机报废补贴工作
- 12垃圾收集房设计规格
- 13中等职业教育论文提纲
- 14忘记过去重新开始说说
- 15厂用电快切装置工作原理及作用
- 16智能垃圾分类回收柜安装服务包括哪些内容
- 17候车亭的双方合同签订中需要注意的问题
- 18候车亭价格的决定性因素包括了款式、大小、材质
- 1替未来的你,抱抱现在的自己
- 2羽绒有鸭味道怎么去除
- 3黑水虻技术处理易腐垃圾,会赚钱吗?
- 4替未来的你,抱抱现在的自己
- 5青春说说带图片大全
- 6记录华人移居澳大利亚200年 《澳洲华人历史》出版
- 7六韬原文
- 8告诉你如何“绿色生活”
- 9红枣泡水喝的功效与作用 红枣泡水可以天天喝吗
- 10关于无奈的说说 包含无奈的心情短语大全
- 11关于无奈的说说 包含无奈的心情短语大全
- 12美食让生活更美好作文800字
- 13关于科学家的名言
- 14[湖南大学]2021年7月日语能力考试成绩证书领取通知
- 15实训精飞!西部战区空军航空兵某旅严密组织节日飞行训练
- 16可爱个性签名集锦,个性签名
- 17Photoshop抠婚纱教程 :利用通道工具快速挖图修长美女婚纱照
- 18[湖南大学]2021年7月日语能力考试成绩证书领取通知