iOS - 常用的CG结构体
CGPoint、CGSize、CGRect、CGRectEdge实际上都是结构体
一,几个常用的结构体
CGPoint 定义一个点,设置x坐标和y坐标
1 2 3 4 5 | struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; |
CGSize 定义一个尺寸,设置宽度和高度
1 2 3 4 5 | struct CGSize { CGFloat width; CGFloat height; }; typedef struct CGSize CGSize; |
CGRect 定一个矩形
1 2 3 4 5 | struct CGRect { CGPoint origin; CGSize size; }; typedef struct CGRect CGRect; |
CGVector 定义一个二维矢量
1 2 3 4 5 | struct CGVector { CGFloat dx; CGFloat dy; }; typedef struct CGVector CGVector; |
CGRectEdge
1 2 3 4 | enum CGRectEdge { CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge }; typedef enum CGRectEdge CGRectEdge; |
二,几个系统定义的量
1.零点,与CGPointMake(0, 0)等效
1 | const CGPoint CGPointZero |
2.零尺寸,与CGSizeMake(0,0)等效
1 | const CGSize CGSizeZero |
3.零矩形,与CGRectMake(0, 0, 0, 0)等效
1 | const CGRect CGRectZero |
4.空矩形,这个和零矩形并不相同,当我们返回两个不相交矩形的交集时,会返回空矩形
1 | const CGRect CGRectNul |
5.无限的矩形
1 | const CGRect CGRectInfinite |
三,一些常用方法
1. 创建一个点
1 | CGPoint CGPointMake(CGFloat x, CGFloat y); |
2. 创建一个尺寸
1 | CGSize CGSizeMake(CGFloat width, CGFloat height); |
3.创建一个矩形
1 | CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height); |
4.创建一个矢量
1 | CGVectorMake(CGFloat dx, CGFloat dy); |
5.获得矩形最左边的x值
1 | CGFloat CGRectGetMinX(CGRect rect); |
6.获取矩形中点的x值
1 | CGFloat CGRectGetMidX(CGRect rect); |
7.获取矩形最右端的x值
1 | CGFloat CGRectGetMaxX(CGRect rect); |
8.获取矩形最上端的y值
1 | CGFloat CGRectGetMinY(CGRect rect); |
9.获取矩形中心点的y值
1 | CGFloat CGRectGetMidY(CGRect rect); |
10.获取矩形最下端的y值
1 | CGFloat CGRectGetMaxY(CGRect rect); |
11.获取矩形宽度
1 | CGFloat CGRectGetWidth(CGRect rect); |
12.获取矩形高度
1 | CGFloat CGRectGetHeight(CGRect rect); |
13.判断两个点是否相等
1 | bool CGPointEqualToPoint(CGPoint point1, CGPoint point2); |
14.判断两个尺寸是否相等
1 | bool CGSizeEqualToSize(CGSize size1, CGSize size2); |
15.判断两个矩形是否相等
1 | bool CGRectEqualToRect(CGRect rect1, CGRect rect2); |
16. 根据一个矩形创建一个标准的矩形
1 | CGRect CGRectStandardize(CGRect rect); |
17. 判断是否为零矩形
1 | bool CGRectIsEmpty(CGRect rect); |
18. 判断是否为空矩形
1 | CGRectIsNull(CGRect rect); |
19.判断是否为无限矩形
1 | 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也可以为负值,则是创建出来的矩形会大于原矩形范围
1 | CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy); |
21.根据一个矩形,返回四个参数都是整数的矩形
1 | CGRect CGRectIntegral(CGRect rect) |
22.返回两个矩形的并集
1 | CGRect CGRectUnion(CGRect r1, CGRect r2); |
23.返回两个矩形的交集,如果没有交集,返回空矩形
1 | CGRect CGRectIntersection(CGRect r1, CGRect r2); |
24.返回一个矩形,偏移量相对于rect
1 | CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy); |
1 | 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); |
25.判断点是否在矩形内
1 | bool CGRectContainsPoint(CGRect rect, CGPoint point); |
26. 判断矩形1是否包含矩形2
1 | bool CGRectContainsRect(CGRect rect1, CGRect rect2); |
27.判断矩形1和矩形2是否相交
1 | bool CGRectIntersectsRect(CGRect rect1, CGRect rect2); |
28. 返回一个表示点的字典
1 | CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point); |
29. 将字典转换为点
1 | bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGPoint *point); |
30. 返回一个表示尺寸的字典
1 | CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size); |
31. 将字典转换为尺寸
1 | bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,CGSize *size) ; |
32.返回一个表示矩形的字典
1 | CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect); |
33.将字典转化为矩形
1 | bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict, CGRect *rect); |
四,其它用法
1 | NSString * NSStringFromCGPoint (CGPoint point); //把一个点转换字符串,下面类似 |
1 | NSString * NSStringFromCGSize (CGSize size); //把尺寸转成字符串 |
1 | NSString * NSStringFromCGRect (CGRect rect); //把矩形转成字符串 |
1 | CGPoint CGPointFromString( NSString *string); //把字符串转换为点 字符串为@"{2,3}"的形式 |
1 | CGSize CGSizeFromString( NSString *string); //把字符串转换为CGSize 字符串为@"{3,4}"的形式 |
1 | CGRect CGRectFromString( NSString *string); //把字符串转换为CGRect 字符串为@"{{3,7},{3,4}}"的形式 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)