博文暂时想到什么写什么,不顺理成章,不顺章成篇。

先看几个概念

坐标点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属性的区别(附图)相关推荐

  1. ios开发之UIView和UIViewController

    UIView 表示屏幕上的一块矩形区域,负责渲染区域的内容,并且响应该区域内发生的触摸事件.它在 iOS App 中占有绝对重要的地位,因为 iOS 中几乎所有可视化控件都是 UIView 的子类. ...

  2. (0046) iOS开发之View的frame和bounds之解惑

    iOS view的frame和bounds之解惑 frame: 该view在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小.(参照 ...

  3. (0034) iOS 开发之UIView动画(过渡效果)

    UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏.产生流畅的动画效果,进而改善用户体验.UIView可以产生动画效果的变化包括: 位置变化:在屏幕上移动视图. 大小变化:改变视图框架(f ...

  4. IOS开发之UIView

    2019独角兽企业重金招聘Python工程师标准>>> #import "AppDelegate.h" @interface AppDelegate () @en ...

  5. IOS开发之CALayer基本属性和使用

    IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...

  6. 图片轮播c语言,IOS开发之UIScrollView实现图片轮播器的无限滚动

    IOS开发之UIScrollView实现图片轮播器的无限滚动 简介 在现在的一些App中常常见到图片轮播器,一般用于展示广告.新闻等数据,在iOS内并没有现成的控件直接实现这种功能,但是通过UIScr ...

  7. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  8. iOS开发之UI开发(UITableView)

    UITableView 继承自UIScrollView,性能极佳 UITableView的两种样式 UITableViewStylePlain列表样式 UITableViewStyleGrouped ...

  9. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

最新文章

  1. iOS 11 UIScrollView的新特性(automaticallyAdjustsScrollViewInsets 不起作用了)
  2. GPT“高仿”系列开源了!最大可达GPT-3大小,还能自主训练
  3. 转: 从微信的故障谈谈服务可用性
  4. PHP与base64
  5. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★
  6. win10 mysql5.5无响应_Win10安装mysql5.5安装最后一步停住卡死未响应的解决方法
  7. 大学计算机系学生,大学计算机专业学生自我介绍
  8. 基础功能4-画loss
  9. select中option解析
  10. remote API和regular API 的区别
  11. 关于SOA您该知道却不愿知道的十件事
  12. 佛罗里达大学计算机博士,2020年佛罗里达大学博士含金量
  13. 向flume发送消息出现Client sent event exceeding the maximum length
  14. Kubernetes(k8s) YAML文件详解
  15. 【ICML2018】63篇强化学习论文全解读
  16. 微信html5小游戏源码70种
  17. javascript 中Object.entries
  18. 显示前半内容后半内容用省略号_2015年广东中考满分作文赏析:特别的一朵花_1500字...
  19. 程序员520❤七夕情人节表白代码Html+Js+Css花瓣相册网页模板❤程序员表白必备
  20. 数据库数据修改报错The instance of entity type ‘XXX‘ cannot be tracked

热门文章

  1. Sprint Three 回顾与总结发表评论团队贡献分
  2. self.a 和 _a 的区别
  3. Q+ Web 改版设计小结
  4. 浅谈创业性公司的发展
  5. java实现qq_java实现的类似qq聊天系统
  6. MySQL语言的算法_MySQL知识整理
  7. Git创建repository,以及clone,提交一个repository
  8. leetcode算法题--Surrounded Regions
  9. leetcode算法题--二进制求和
  10. Python之再说编码