ios开发之UIView的frame、bounds跟center属性的区别(附图)
博文暂时想到什么写什么,不顺理成章,不顺章成篇。
先看几个概念
坐标点Poit:向右侧为X轴正方向的值x,原点下侧为Y轴正方向的值y
大小Size:由宽度width和高度height构成,表示一个矩形
区域Rect:它有坐标点Poit和大小Size构成,表示一个区域,既有位置也有大小
相对:有参照物,因参照物的大小位置改变而改变
绝对:无参照物,大小位置固定
再看代码构成:
点由这样来创建,X轴大小和Y大小 CGPoint point = CGPointMake(80,40)
大小Size由这样来创建 CGSize size = CGSizeMake(144,72)表示创建一个宽度为144和高度为72的矩形视图
区域rect这样来创建:CGRect rect=CGRectMake(10, 10, 120, 100); 它表示位置在点(10,10)宽度120高度100的视图
然后呢 看一下frame、bounds跟center三者的定义描述
frame:描述当前视图在其父视图中的位置和大小
bounds:描述当前视图在其自身坐标系统中的位置和大小。
center:描述当前视图的中心点在其父视图中的位置。
我们从描述中可以看出,frame和bounds属性, 都描述视图的大小(CGSize)和位置(CGPoint)的,两者都用CGRect表示。不同的是,frame描述的是在其父视图中的CGRect,而bounds描述的是在其自身视图中的CGRect,也就是说,两者所在的坐标是不同的.而center表示矩形中心点在其父视图中的位置。frame一般用来来设置视图的大小和位置,用center来改变(移动)视图的位置。frame和center都可以改变位置,如果对视图进行旋转、缩放也都是相对于center来操作的。
最直观的我们用一个图和代码值来描述三者的表示:
首先建一个空视图,拖拽三个wiew进去,分别给于不同的颜色,并且命名。代码和图如下
// // ViewController.h // NSPredicateTest // // Created by xuhongjiang on 15/10/27. // Copyright (c) 2015年 xuhongjiang. All rights reserved. // #import <UIKit/UIKit.h>@interface ViewController : UIViewController @property (retain, nonatomic) IBOutlet UIView *orangeView; @property (retain, nonatomic) IBOutlet UIView *greenView; @property (retain, nonatomic) IBOutlet UIView *grayView;@end
分别定义了三个view,橙色view最大,里面包含灰色view和绿色view。我们拿绿色view来说明问题。
1.frame
其实灰色view的大小签好就是绿色view的frame大小,绿色视图frame的origin点(灰色view的宽度,灰色view的高度),也既是灰色view相对于橙色view右下角的点,也是绿色view左上角相对于橙色view的点。frame但Size就是绿色view的宽度和高度
2.bounds
绿色view的bounds的点是相对自己,是(0,0),大小size是绿色view的宽度和高度,这个很容易理解。
3.center
绿色view的center的横坐标=(绿色view宽度width/2)+(绿色view的.frame.origin.x);纵坐标=(绿色view高度height/2)+(绿色view的.frame.origin.y);
下面的代码是经过调试后的具体值,仔细观察,不难发现frame、bounds、center三者的区别还是很明显的。
1 // 2 // ViewController.m 3 // NSPredicateTest 4 // 5 // Created by xuhongjiang on 15/10/27. 6 // Copyright (c) 2015年 xuhongjiang. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #import "Products.h" 11 12 @interface ViewController () 13 14 @end 15 16 @implementation ViewController 17 18 - (void)viewDidLoad { 19 [super viewDidLoad]; 20 [self layTest]; 21 } 22 23 - (void)didReceiveMemoryWarning { 24 [super didReceiveMemoryWarning]; 25 } 26 27 -(void) layTest 28 { 29 //橙色view的frame 返回一个相对于父容器的区域CGRect,由点point和大小Size构成 30 CGRect orangeFrameRect=_orangeView.frame;//(CGRect) orangeRect = (origin = (x = 43, y = 98), size =(width = 289,height = 443)) 31 CGPoint orangeFramePoit=_orangeView.frame.origin;//(CGPoint) orangePoit = (x = 43, y = 98) 32 CGSize orangeFrameSize=_orangeView.frame.size;//(CGSize) orangeSize = (width = 289, height = 443) 33 //橙色view的bounds 返回在自身坐标中的位置和大小,也是一个区域CGRect,同样由点point和大小Size构成 34 CGRect orangeBoundsRect= _orangeView.bounds;//(CGRect) orangeBoundsRect = (origin = (x = 0, y = 0), size = (width = 289, height = 443)) 35 CGPoint orangeBoudsPoit=_orangeView.bounds.origin;//(CGPoint) orangeBoudsPoit = (x = 0, y = 0) 36 CGSize orangeBoundsSize=_orangeView.bounds.size;//(CGSize) orangeBoundsSize = (width = 289, height = 443) 37 //橙色view的center 它表示相对于父容器的自身中心点 38 CGPoint oranageCenterPoit= _orangeView.center;//(CGPoint) oranageCenterPoit = (x = 187.5, y = 319.5) 39 40 41 42 //绿色view的frame 等同于灰色view区域 返回一个相对于父容器(橙色view)的区域CGRect,由点point和大小Size构成 43 CGRect greenFrameRect=_greenView.frame;//(CGRect) greenFrameRect = (origin = (x = 40, y = 64), size = (width = 209, height = 256)) 44 CGPoint greenFramePoit=_greenView.frame.origin;//(CGPoint) greenFramePoit = (x = 40, y = 64) 45 CGSize greenFrameSize=_greenView.frame.size;//(CGSize) greenFrameSize = (width = 209, height = 256) 46 47 //绿色view的bounds 返回在自身坐标中的位置和大小,也是一个区域CGRect,同样由点point和大小Size构成 48 CGRect greenBoundsRect= _greenView.bounds;//(CGRect) greenBoundsRect = (origin = (x = 0, y = 0), size = (width = 209, height = 256)) 49 CGPoint greenBoudsPoit=_greenView.bounds.origin;//(CGPoint) greenBoudsPoit = (x = 0, y = 0) 50 CGSize greenBoundsSize=_greenView.bounds.size;//(CGSize) greenBoundsSize = (width = 209, height = 256) 51 52 //绿色view的center 它表示相对于父容器(橙色view)的自身中心点 53 CGPoint greenCenterPoit= _greenView.center;//(CGPoint) greenCenterPoit = (x = 144.5, y = 192) 54 55 //灰色view的区域等同于绿色view的frame x=width=40 y=height=64 56 CGSize grayFramePoit=_grayView.frame.size;//(CGSize) grayFramePoit = (width = 40, height = 64) 57 //它为什么只是20和32的点 因为它是相对于绿色容器的自身中心点 58 CGPoint grayCenterPoit= _grayView.center;//(CGPoint) grayCenterPoit = (x = 20, y = 32) 59 }
本文是个人原创,欢迎批评指正,如转载请注明出处。
转载于:https://www.cnblogs.com/hj2xx2hj/p/4918611.html
ios开发之UIView的frame、bounds跟center属性的区别(附图)相关推荐
- ios开发之UIView和UIViewController
UIView 表示屏幕上的一块矩形区域,负责渲染区域的内容,并且响应该区域内发生的触摸事件.它在 iOS App 中占有绝对重要的地位,因为 iOS 中几乎所有可视化控件都是 UIView 的子类. ...
- (0046) iOS开发之View的frame和bounds之解惑
iOS view的frame和bounds之解惑 frame: 该view在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小.(参照 ...
- (0034) iOS 开发之UIView动画(过渡效果)
UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏.产生流畅的动画效果,进而改善用户体验.UIView可以产生动画效果的变化包括: 位置变化:在屏幕上移动视图. 大小变化:改变视图框架(f ...
- IOS开发之UIView
2019独角兽企业重金招聘Python工程师标准>>> #import "AppDelegate.h" @interface AppDelegate () @en ...
- IOS开发之CALayer基本属性和使用
IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...
- 图片轮播c语言,IOS开发之UIScrollView实现图片轮播器的无限滚动
IOS开发之UIScrollView实现图片轮播器的无限滚动 简介 在现在的一些App中常常见到图片轮播器,一般用于展示广告.新闻等数据,在iOS内并没有现成的控件直接实现这种功能,但是通过UIScr ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- iOS开发之UI开发(UITableView)
UITableView 继承自UIScrollView,性能极佳 UITableView的两种样式 UITableViewStylePlain列表样式 UITableViewStyleGrouped ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
最新文章
- iOS 11 UIScrollView的新特性(automaticallyAdjustsScrollViewInsets 不起作用了)
- GPT“高仿”系列开源了!最大可达GPT-3大小,还能自主训练
- 转: 从微信的故障谈谈服务可用性
- PHP与base64
- 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★
- win10 mysql5.5无响应_Win10安装mysql5.5安装最后一步停住卡死未响应的解决方法
- 大学计算机系学生,大学计算机专业学生自我介绍
- 基础功能4-画loss
- select中option解析
- remote API和regular API 的区别
- 关于SOA您该知道却不愿知道的十件事
- 佛罗里达大学计算机博士,2020年佛罗里达大学博士含金量
- 向flume发送消息出现Client sent event exceeding the maximum length
- Kubernetes(k8s) YAML文件详解
- 【ICML2018】63篇强化学习论文全解读
- 微信html5小游戏源码70种
- javascript 中Object.entries
- 显示前半内容后半内容用省略号_2015年广东中考满分作文赏析:特别的一朵花_1500字...
- 程序员520❤七夕情人节表白代码Html+Js+Css花瓣相册网页模板❤程序员表白必备
- 数据库数据修改报错The instance of entity type ‘XXX‘ cannot be tracked