CGGeometry.h文件是用C语言实现的一个封装了许多常用几何方法的文件。

一、几个常用结构体

struct CGPoint {

CGFloat x;

CGFloat y;

};

定义一个点,设置x坐标和y坐标

struct CGSize {

CGFloat width;

CGFloat height;

};

定义一个尺寸,设置宽度和高度

struct CGVector {

CGFloat dx;

CGFloat dy;

};

定义一个二维矢量

struct CGRect {

CGPoint origin;

CGSize size;

};

定义一个矩形

二、几个系统定义的量

const CGPoint CGPointZero

零点,与CGPointMake(0, 0)等效

const CGSize CGSizeZero

零尺寸,与CGSizeMake(0, 0)等效

const CGRect CGRectZero

零矩形,与CGRectMake(0, 0, 0, 0)等效

const CGRect CGRectNull

空矩形,这个和零矩形并不相同,当我们返回两个不相交矩形的交集时,会返回空矩形。

const CGRect CGRectInfinite

无限的矩形

三、一些常用方法

CGPoint CGPointMake(CGFloat x, CGFloat y);

创建一个点

CGSize CGSizeMake(CGFloat width, CGFloat height);

创建一个尺寸

CGVectorMake(CGFloat dx, CGFloat dy);

创建一个矢量

CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width,

CGFloat height);

创建一个矩形

CGFloat CGRectGetMinX(CGRect rect);

获得矩形最左边的x值

CGFloat CGRectGetMidX(CGRect rect);

获取矩形中点的x值

CGFloat CGRectGetMaxX(CGRect rect);

获取矩形最右端的x值

CGFloat CGRectGetMinY(CGRect rect);

获取矩形最上端的y值

CGFloat CGRectGetMidY(CGRect rect);

获取矩形中心点的y值

CGFloat CGRectGetMaxY(CGRect rect);

获取矩形最下端的y值

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);

判断两个矩形是否相等

CGRect CGRectStandardize(CGRect rect);

根据一个矩形创建一个标准的矩形

bool CGRectIsEmpty(CGRect rect);

判断是否为零矩形

CGRectIsNull(CGRect rect);

判断是否为空矩形

bool CGRectIsInfinite(CGRect rect);

判断是否为无限矩形

CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy);

创建一个内嵌的矩形,中心和rect参数的中心一样,dx,dy对应内嵌的宽度和高度

比如:CGRect rect= CGRectInset(CGRectMake(0, 0, 100, 100), 10, 10);

会创建出的rect为(10,10,80,80),dx,dy也可以为负值,则是创建出来的矩形会大于原矩形范围。

CGRect CGRectIntegral(CGRect rect)

根据一个矩形,返回四个参数都是整数的矩形

CGRect CGRectUnion(CGRect r1, CGRect r2);

返回两个矩形的并集

CGRect CGRectIntersection(CGRect r1, CGRect r2);

返回两个矩形的交集,如果没有交集,返回空矩形

CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy);

返回一个矩形,偏移量相对于rect

void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,

CGFloat amount, CGRectEdge edge);

这个函数用来分割矩形,参数rect是源矩形,slice和remainder是分割后的两部分矩形,amount是分割线,edge是分割选项。

注意:1、edge是一个宏,定义了分割的方式如下:

1
2
3
4
5
6
7
8
9
10
typedef CF_ENUM(uint32_t, CGRectEdge) {
  //从x的最小处进行垂直分割
  CGRectMinXEdge, 
  //从y的最小处进行水平分割
  CGRectMinYEdge, 
  //从x最大处进行垂直分割
  CGRectMaxXEdge,
  //从y最大处进行水平分割
  CGRectMaxYEdge
};

2、slice和remainder是地址。

3、举例如下,将会分割出两个矩形分别为(40,0,60,100)(0,0,40,100);

1
2
3
4
CGRect rect = CGRectMake(0, 0, 100, 100);
    CGRect slice ;
    CGRect remainder;
    CGRectDivide(rect, &slice, &remainder, 60, CGRectMaxXEdge);

bool CGRectContainsPoint(CGRect rect, CGPoint point);

判断点是否在矩形内

bool CGRectContainsRect(CGRect rect1, CGRect rect2);

判断矩形1是否包含矩形2

bool CGRectIntersectsRect(CGRect rect1, CGRect rect2);

判断矩形1和矩形2是否相交

CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point);

返回一个表示点的字典

bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,

CGPoint *point);

将字典转换为点

CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size);

返回一个表示尺寸的字典

bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,

CGSize *size) ;

将字典转换为尺寸

CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect);

返回一个表示矩形的字典

bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict,

CGRect *rect);

将字典转化为矩形

IOS开发几何类方法 CGGeometry.h文件的更多相关文章

  1. iOS开发拓展篇—封装音频文件播放工具类

    iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...

  2. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  3. 读书笔记-详解C程序开发中 .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  4. CGGeometry.h 文件详解

    这些是在CGGeometry.h里的 CGPoint.CGSize.CGRect.CGRectEdge实际上都是结构体 struct CGPoint { CGFloat x; CGFloat y; } ...

  5. iOS开发 - OC - PCH文件使用

    一. PCH文件的作用 Xcode中,PCH文件在程序编译的时候会自动包含进去.也就是说PCH中的内容是全局的,可以使用在程序的任何地方,通过这个特性,我们可以概括到PCH的作用有以下几个方面: (1 ...

  6. IOS开发UI基础之Plis文件-字典转模型

    什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程 ...

  7. iOS开发之网络编程--获取文件的MIMEType

    前言:有时候我们需要获取文件的MIMEType的信息,下面就介绍关于获取MIMEType的方法. 1.直接百度搜索关键字"MIMEType",你会找到,然后查吧: 2.用代码获取文 ...

  8. iOS开发- Xcode 7添加pch文件

    1.打开你的Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点 ...

  9. iOS开发-AFNetworking参数和多文件同时上传【多文件上传】

    1. 前言 在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数. ...

随机推荐

  1. No2_3.接口继承多态_Java学习笔记_多态

    ***多态***1.多态性:通常使用方法的重载(Overloading)和重写(Overriding)实现类的多态:2.重写之所以具有多态性,是因为父类的方法在子类中被重写,方法名相同,实现功能不同. ...

  2. iframe与frameset有什么区别

    frame,iframe,frameset 的区别 <FRAMESET> <FRAME><NOFRAMES><IFRAME>欲明白本篇[HTML剖析]之 ...

  3. js学习(一)

    在javascript中,哪些值能作为if的条件呢? 1.布尔变量true/false 2.数字 非0数值为true, 0 或NaN为false. 3.对象 对象为null或undefined为fal ...

  4. js兼容性 - 动态删除script标签后 ,定义的函数是否执行

    hello.js function hello(){ alert('hello'); } hello.html <!DOCTYPE html> <html lang="en ...

  5. linux tar使用

    Linux  tar指令简单使用 -c:创建包,-x:解压或解包(-c和-x可理解为互逆运算),-t:查看包 -f:后加处理文件,必须放在参数组合的最后一位(tar  -cf  a.tar  1.tx ...

  6. Android 代码编辑器中实现代码语法高亮

    想写一款Android手机上的代码编辑器,实现类似c4droid中代码语法高亮 通过Android中的控件WebView中嵌入html网页,html引入CodeMirror这个第三方库就可以了,其实就 ...

  7. 有空可以对C#尝一下鲜,WCF看上去很诱人(跨进程、跨机器、跨子网,跨企业网乃至跨Internet的分布式服务)

    说道底不还是要借助NGNIX实现,PHP自身呢?C#的WCF可以脱离IIS就可以实现跨进程.跨机器.跨子网,跨企业网乃至跨Internet的分布式服务,宿主可以是IIS,WinForm,WPF, Wi ...

  8. Powershell 执行外部命令

    Powershell 执行外部命令 724 11月, 2011  在 Powershell  tagged Powershell教程 / 程序 by Mooser Lee本文索引[隐藏]1通过nets ...

  9. fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

    这个问题很奇怪.原来是/machine:X86 /machine:X64这两个链接器选项一起使用了.所以就冲突了.接手别人的项目就是晕啊.不知道为什么在VS中linker commandline的ad ...

  10. Base64 加密之中文乱码

    ase64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%.字符范围为 A-Z  a-z  0-9  \  +.但编码后的字符串不太适合使用URL传输,中文加密 ...