关于bounds和frame的区别:
bounds和frame都是属于
CGRect类型的结构体,系统的定义如下,包含一个
CGPoint(起点)和一个
CGSize(尺寸)子结构体。
struct
CGRect {
CGPoint origin;
CGSize size;
CGPoint origin;
CGSize size;
};
self
.
shareButton
.
center
=
CGPointMake
(
K_SCREEN_WIDTH
/
2.0
,
0.75
*
K_SCREEN_HEIGHT
);
CGRect rectBounds = self . shareButton . bounds ;
CGRect rectFrame = self . shareButton . frame ;
CGRect rectBounds = self . shareButton . bounds ;
CGRect rectFrame = self . shareButton . frame ;
ZYLog(@"rectBounds--->%@
,
rectFrame----->%@"
,
NSStringFromCGRect
(rectBounds),
NSStringFromCGRect
(rectFrame));
系统的Log输出:
rectBounds--->{{0, 0}, {113, 23}}
,
rectFrame----->{{131, 488.75}, {113, 23}}。
可见bounds是以当前控件的左上角点为起点(
origin
)的,
size为自身的尺寸。
frame是以当前控件所在的父视图的原点为起点(
origin
),size也同样为其自身的尺寸。
因此:当我们将一个子控件添加到一个父视图上面,并希望子控件和父视图完全重合,那么我们直接对子视图的尺寸进行如下操作即可:
children.frame = fatherView.bounds;
对结构体的打印输出:
CGPoint
point = CGPointMake(
0.0
f,
0.0
f);
CGSize
size = CGSizeMake(
10.0
f,
10.0
f);
CGRect
rect = CGRectMake(point
.x
, point
.y
, size
.width
, size
.height
);
NSLog(@"point: %@", NSStringFromCGPoint(point))
;
NSLog(@"size: %@", NSStringFromCGSize(size))
;
NSLog(@"rect: %@", NSStringFromCGRect(rect))
;
常用获取控制器各种尺寸的方法:
-
获得矩形最左边的x值 CGFloat CGRectGetMinX(CGRect rect);
-
获取矩形中点的x值 CGFloat CGRectGetMidX(CGRect rect);
-
获取矩形最右端的x值 CGFloat CGRectGetMaxX(CGRect rect);
-
获取矩形最上端的y值 CGFloat CGRectGetMinY(CGRect rect);
-
获取矩形中心点的y值 CGFloat CGRectGetMidY(CGRect rect);
-
获取矩形最下端的y值 CGFloat CGRectGetMaxY(CGRect rect);
-
获取矩形宽度 CGFloat CGRectGetWidth(CGRect rect);
-
获取矩形高度 CGFloat CGRectGetHeight(CGRect rect);
-
判断两个点是否相等 bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);
-
判断两个尺寸是否相等 bool CGSizeEqualToSize(CGSize size1, CGSize size2);
-
判断两个矩形是否相等 bool CGRectEqualToRect(CGRect rect1, CGRect rect2);