CGPoint、CGSize、CGRect、CGRectEdge实际上都是结构体

一,几个常用的结构体

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

struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;

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

struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;

CGRect  定一个矩形

struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;

CGVector  定义一个二维矢量

struct CGVector {
CGFloat dx;
CGFloat dy;
};
typedef struct CGVector CGVector;

CGRectEdge

enum CGRectEdge {
CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge
};
typedef enum CGRectEdge CGRectEdge;

二,几个系统定义的量

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

const CGPoint CGPointZero

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

const CGSize CGSizeZero

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

const CGRect CGRectZero

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

const CGRect CGRectNul

5.无限的矩形

const CGRect CGRectInfinite

 三,一些常用方法

1. 创建一个点

CGPoint CGPointMake(CGFloat x, CGFloat y);

2. 创建一个尺寸

CGSize CGSizeMake(CGFloat width, CGFloat height);

3.创建一个矩形

CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height);

4.创建一个矢量

CGVectorMake(CGFloat dx, CGFloat dy); 

5.获得矩形最左边的x值

CGFloat CGRectGetMinX(CGRect rect);

6.获取矩形中点的x值

CGFloat CGRectGetMidX(CGRect rect);

7.获取矩形最右端的x值

CGFloat CGRectGetMaxX(CGRect rect);

8.获取矩形最上端的y值

CGFloat CGRectGetMinY(CGRect rect);

9.获取矩形中心点的y值

CGFloat CGRectGetMidY(CGRect rect);

10.获取矩形最下端的y值

CGFloat CGRectGetMaxY(CGRect rect);

11.获取矩形宽度

CGFloat CGRectGetWidth(CGRect rect);

12.获取矩形高度

CGFloat CGRectGetHeight(CGRect rect);

13.判断两个点是否相等

bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);

14.判断两个尺寸是否相等

bool CGSizeEqualToSize(CGSize size1, CGSize size2);

15.判断两个矩形是否相等

bool CGRectEqualToRect(CGRect rect1, CGRect rect2);

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

CGRect CGRectStandardize(CGRect rect);

17. 判断是否为零矩形

bool CGRectIsEmpty(CGRect rect);

18. 判断是否为空矩形

CGRectIsNull(CGRect rect);

19.判断是否为无限矩形

bool CGRectIsInfinite(CGRect rect); 

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

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

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

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

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

CGRect CGRectIntegral(CGRect rect)

22.返回两个矩形的并集

CGRect CGRectUnion(CGRect r1, CGRect r2);

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

CGRect CGRectIntersection(CGRect r1, CGRect r2);

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

CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy);
void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder, CGFloat amount, CGRectEdge edge);

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

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

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

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

 25.判断点是否在矩形内

bool CGRectContainsPoint(CGRect rect, CGPoint point);

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

bool CGRectContainsRect(CGRect rect1, CGRect rect2);

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

bool CGRectIntersectsRect(CGRect rect1, CGRect rect2);

28. 返回一个表示点的字典

CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point);

29. 将字典转换为点

bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGPoint *point);

30. 返回一个表示尺寸的字典

CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size);

31. 将字典转换为尺寸

bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGSize *size) ;

32.返回一个表示矩形的字典

CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect);

33.将字典转化为矩形 

bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict, CGRect *rect);

 四,其它用法

NSString *NSStringFromCGPoint(CGPoint point);  //把一个点转换字符串,下面类似
NSString *NSStringFromCGSize(CGSize size);  //把尺寸转成字符串
NSString *NSStringFromCGRect(CGRect rect);//把矩形转成字符串
CGPoint CGPointFromString(NSString *string);   //把字符串转换为点 字符串为@"{2,3}"的形式
CGSize CGSizeFromString(NSString *string);     //把字符串转换为CGSize 字符串为@"{3,4}"的形式
CGRect CGRectFromString(NSString *string);      //把字符串转换为CGRect 字符串为@"{{3,7},{3,4}}"的形式

iOS - 常用的CG结构体的更多相关文章

  1. iOS 用KVC设置结构体

    iOS 用KVC设置结构体 在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体.这很不面向对象. 执行下面的语句将会报错: [self setValue:@() forKeyPat ...

  2. iOS学习06C语言结构体

    1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...

  3. iOS开发——C篇&结构体与枚举

    一:结构体与枚举的介绍: 结构体与枚举:是一种存储复杂的数据结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合. 二:结构体的创建 struct user {     char ...

  4. iOS安全攻防之结构体保护使用

    Objective-C 代码很容易被 hook,因此需要对一些重要的业务逻辑进行保护,可以改用结构体的形式,把函数名隐藏在结构体里,以函数指针成员的形式存储.这样编译后只留了下地址,去掉了名字和参数表 ...

  5. iOS Foundation框架简介 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  6. iOS Foundation框架 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  7. c语言结构体

    [C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...

  8. C/C++(结构体)

    结构体(struct) 从某种意义上说,会不会使用struct,如何使用struct是区别一个开发人员是否具备丰富开发经验的试金石. 处理由不同类型成员构成的构造类型,要采用结构体的方式. 定义:关键 ...

  9. 13.Object-C--浅谈Foundation框架常用的结构体

    ------- android培训.iOS培训.期待与您交流! ---------- 昨天学习了Foundation框架中常用的结构体,下面我简单的总结一下,如果错误麻烦请留言指正,谢谢! Found ...

随机推荐

  1. 为OLED屏添加GUI支持6:进度条控件

    为OLED屏添加GUI支持6:进度条控件 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...

  2. 基于mindwave脑电波进行疲劳检测算法的设计(4)

    上一次的实验做到可以从pc端读取到MindWave传输过来的脑电波原始数据了. 我是先定义一个结构体,该结构体对应保存所有能从硬件中取到的原始数据. struct FD_DATA { int batt ...

  3. (转) mysql中left join,right join,inner join的区别

    转自:https://blog.csdn.net/qq_35975416/article/details/78842958 sql查询中有一个非常重要的环节就是表的关联查询,一般使用left join ...

  4. jsonp的工作原理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. php中static和self的区别

    在阅读一些框架的源码时发现了new static(),和new self(),甚是不解,后来查阅资料,才知道static采用了延迟绑定,能准确知道是父类还是子类的调用.这就是说static是个聪明的小 ...

  6. 学习Mysql过程中拓展的其他技术栈:设置linux虚拟机的固定ip和克隆linux虚拟机

    一.设置linux虚拟机的固定ip 1. 安装好虚拟机后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子 ...

  7. Java8学习笔记(十)--自定义收集器

    前言 以前写过Java8中的自定义收集器,当时只是在文章末尾放了个例子,觉得基本用法挺简单,而且有些东西没搞懂(比如combiner方法到底做什么的),没有专门写,过了一段时间又忘了,所以,即使还是没 ...

  8. iOS开发-- 一个苹果证书如何多次使用

    苹果的开发者账号限制开发者证书只能有5个,我们开发过程中遇到超过5个人需要真机调试的情况,如何解决这个问题呢? 有两种方式可以解决问题: 1. Revoke原来的证书----不推荐 将以前的证书“re ...

  9. svn eclipse链接

    先下载site-1.8.22.zip 安装包 然后 在D:\software\eclipse\dropins 目录下新建 svn文件夹 把下载的文件解压到该文件夹下 ,*.xml 删除 不需要 只要 ...

  10. 关于删除 hao123 主页设置的一点经验

    :first-child { margin-top: 0px; } blockquote>:last-child { margin-bottom: 0px; } --> 说一说关于删除 h ...