iOS-CGRect、CGSize、CGPoint__UIEdgeInsets 介绍
来源:互联网 发布:mysql 连接远程数据库 编辑:程序博客网 时间:2024/04/30 07:42
一.CGRect
每个视图都使用一个边框定义其界限。这个边框指定了视图的轮廓:其位置、宽度和高度。
我们使用Core Graphics结构定义边框矩形。
对于边框,这通常表示由原点(CGPoint,x和y)和大小(CGsize,宽度和高度)组成的CGRect矩形。
CGRect结构在屏幕上定义了一个矩形。它包含原点(rect.origin)和大小(rect.size)
1>.CGPoint struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; 2>.CGSize struct CGSize { CGFloat width; CGFloat height; }; typedef struct CGSize CGSize; 3>.CGRect struct CGRect { CGPoint origin;//偏移是相对父窗口的 CGSize size; }; typedef struct CGRect CGRect;
这三个结构体均在一个头文件里:CGGeometry.h
1.CGRectMake方法
/* CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) { CGRect rect; rect.origin.x = x; rect.origin.y = y; rect.size.width = width; rect.size.height = height; return rect; } */ //定义一个矩形大小 CGRect rect = CGRectMake(10, 100, 100, 100); _lbl1.frame = rect; //把CGRect结构转变为格式化字符串。 NSLog(@"格式化字符串%@",NSStringFromCGRect(rect)); //由字符串表示恢复出矩形 NSString *str = @"{{150, 100}, {100, 100}}"; CGRect rect1 = CGRectFromString(str); _lbl2.frame = rect1; //CGRectZero是一个高度和宽度为零、位于(0,0)的矩形常量。 //需要创建边框但还不确定边框大小或位置时,可以使用此常量。 _lbl4.frame = CGRectZero; //CGSizeZero 0大小 CGPointZero 0位置
2.CGPoint和CGSize
CGPoint通过x和y坐标定义,CGSize包括宽度和高度。
使用CGPointMake(x,y)创建点。CGSize- Make(width,height)创建大小。
虽然这两个结构看上去相同(两个浮点值),但iPhoneSDK对二者有所区别。点表示位置值,大小表示程度值。不能将Frame.origin设置为大小。
与矩形相同,可以将它们与字符串进行相互转换,可用如下函数:
NSStringFromCGPoint()、
NSStringPromCGgize()、
CGSizeFromString()、
CGPointFromString()。
//CGPoint CGPoint point = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2); _lbl2.center = point; //CGSize CGSize size = CGSizeMake(10, 10); /* 当希望移动视图或重新调整视图大小时,可以更新其边框的原点、中心点或大小。不需要担心显示或隐藏的矩形部分。iPhone将负责完成重新绘图。这允许将视图作为切实的对象对待,并将呈现问题委托给CocoaTouch 标准CoreGraphics调用会实时转换视图。举例来说,可以应用剪辑、旋转或其他平面几何效果。CocoaTouch支持一整套仿射转换(转换、旋转、缩放和倾斜等)。 任何UIView子类的drawRect:方法都提供通过低级Core Graphics调用进行绘图的入口点。 */
3.判断两个点,大小,矩形是否相等
bool CGPointEqualToPoint (CGPoint point1, CGPoint point2);
bool CGSizeEqualToSize (CGSize size1, CGSize size2);
bool CGRectEqualToRect (CGRect rect1, CGRect rect2);
注:CGPoint,CGSize,CGRect的内部数据都是CGPoint,对于浮点数,由于可能存在舍入误差,不能直接判断两者是否相等,而应该判断两个值的差是否足够小。使用上述方法可以避免手工做这些判断,简化代码。
4. 获取矩形边界,中点坐标值,长宽
获取边界坐标值,即x,y的最大值与最小值。
CGFloat CGRectGetMinX(CGRect rect);
CGFloat CGRectGetMaxX(CGRect rect);
CGFloat CGRectGetMinY(CGRect rect);
CGFloat CGRectGetMaxY(CGRect rect);
获取中点坐标值,即x,y的中点
CGFloat CGRectGetMidX(CGRect rect);
CGFloat CGRectGetMidY(CGRect rect);
获取矩形长,宽
CGFloat CGRectGetWidth(CGRect rect);
CGFloat CGRectGetHeight(CGRect rect);
5.对称缩进CGRect
//CGRectlnset(Rect,float,float)用来创建较小或较大的矩形(中心点相同)。 //使用正的内嵌值表示较小的矩形,使用负的内嵌值表示较大的矩形。 _lbl3.frame = CGRectInset(rect, 10, 10);
6. 非对称缩进CGRect
CGRect rect2 = CGRectMake(0, 0, 100, 200); UIEdgeInsets contentInsets2 = UIEdgeInsetsMake(10, 20, 30, 40);//top, left, bottom,right CGRect result2 = UIEdgeInsetsInsetRect(rect2, contentInsets2); _lbl4.frame = result2; //result origin(20,10) and size(40,160)
7. 调整小数像素CGRect到整数像素
//将origin值向下调整到最近整数,size向上调整到最近整数,使生成的CGRect可以完全包含原来的CGRect. CGRect rect3 = CGRectMake(5, 7.5, 50, 29); CGRect result3 = CGRectIntegral(rect3); //result origin(5,7) and size(50,30)
8. 检查矩形内是否包含某点
CGRect enemyRect = CGRectMake(0, 0, 100, 200); CGPoint hitPoint = CGPointMake(50, 50); if(CGRectContainsPoint(enemyRect, hitPoint)) { // YES! }
9.检查两矩形是否相交
CGRect playerRect = CGRectMake(200, 300, 10, 10); CGRect mineRect = CGRectMake(10, 10, 20, 20); if(CGRectIntersectsRect(playerRect, mineRect)) { // OUCH! }
10.CGRect与NSDictionary转换
//CGRect转换NSDictionary CGRect rect4 = CGRectMake(0, 0, 100, 200); CFDictionaryRef frameDictRef = CGRectCreateDictionaryRepresentation(rect4); NSDictionary *dic = [NSDictionary dictionaryWithDictionary:(__bridge NSDictionary * _Nonnull)(frameDictRef)]; NSLog(@"%@", dic); //NSDictionary转换 CGRect CGRect Rect5; NSDictionary *dic5 = [NSDictionary dictionaryWithObjectsAndKeys:@0,@"X",@0,@"Y",@100,@"Width",@200,@"Height",nil]; CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)dic5, &Rect5); _lbl2.frame = Rect5;
11. CGRect与NSValue转换
//在NSArray,NSDictionary容器中只能存储Objetive-C对象,不能直接存储C结构体,所有需要存储矩形时,需要将其转换为NSValue值。
CGRect rect6 =CGRectMake(0, 0, 100, 200);
NSValue *value = [NSValuevalueWithCGRect:rect6];
NSLog(@"%@",value);
/*
空矩形 CGRectNull:取两个不相交矩形的相交区域会返回CGRectNull,一个矩形与CGRectNull的并集为原矩形。使用CGRectIsNull判断一个矩形是否为CGRectNull。CGRectIsEmpty对CGRectZero和CGRectNull都返回true;
无限矩形 CGRectInfinite具有无限区域的矩形,可使用CGRectIsInfinite进行判断。
*/
二.UIEdgeInset
UIEdgeInsets UIEdgeInsetsMake (
CGFloat top,
CGFloat left,
CGFloat bottom,
CGFloat right
);
UIEdgeInsets,由函数 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right );构造出
分别表示其中的内容/标题/图片离各边的距离。
UIButton内有两个控件titleLabel和imageView,可以用来显示一个文本和图片,这里的图片区别于背景图片。
给UIButton设置了title和image后,它们会图片在左边,文本在图片右边显示。它们两个做为一个整体依赖于button的contentHorizontalAlignment居左居右或居中显示。
//titleLabel [_btn setTitle:@"独家" forState:UIControlStateNormal]; _btn.titleLabel.font = [UIFont boldSystemFontOfSize:20]; //只是让标签中的文本左对齐,但并没有改变标签在按钮中的对齐方式。 _btn.titleLabel.textAlignment = NSTextAlignmentLeft; //把按钮的内容(控件)的对齐方式修改为水平左对齐,但是这们会紧紧靠着左边,不好看, _btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; //但是这们会紧紧靠着左边,不好看, //_btn.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); //image UIImage *image = [UIImage imageNamed:@"purple_button"]; [_btn setImage:image forState:UIControlStateNormal]; //UIEdgeInsets //若要title在图片的上方,则位置相对于图片来说,向上移动-80 [_btn setImageEdgeInsets:UIEdgeInsetsMake(0, 20, 0, 0)]; [_btn setTitleEdgeInsets:UIEdgeInsetsMake(-80, -50, 0, 0)];
单独设置一个title或者image在button中的位置,UIEdgeInsets是相对于button的frame来计算的(上,左,下,右,)
本文dome:http://download.csdn.net/detail/jackjia2015/9413970
- iOS-CGRect、CGSize、CGPoint__UIEdgeInsets 介绍
- IOS 中的CGFloat、CGPoint、CGSize和CGRect
- iOS开发>>>CGFloat、CGPoint、CGSize和CGRect
- IOS 中的CGFloat、CGPoint、CGSize和CGRect
- ios CGPoint CGSize CGRect CGFloat用法
- [IOS]IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- ios几何数据结构:CGGeometry,CGPoint,CGSize,CGRect,CGRectInset,CGRectOffset,CGRectDivide
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- IOS开发中的CGFloat、CGPoint、CGSize和CGRect
- mysql主从复制(超简单)
- Android开发者网址导航
- union+join
- FPGA 闪烁LED
- mysql 添加外键
- iOS-CGRect、CGSize、CGPoint__UIEdgeInsets 介绍
- AS3 多线程
- 安装python包
- Android小问题:代码控制,动态隐藏显现状态栏
- 为什么优秀的程序员也是优秀的设计师
- Akka Path Concept
- 2015年最值得关注的8款用户界面产品
- Android网络编程之使用HttpClient批量上传文件
- 大话机器学习(一)--Go for it!