iOS(CGGeometry)几何类方法总结

简介: iOS(CGGeometry)几何类方法总结

iOS开发几何类方法总结

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;

};

定义一个矩形

二、几个系统定义的量

 

constCGPoint CGPointZero

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

 

 

constCGSize CGSizeZero

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

 

 

constCGRect CGRectZero

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

 

constCGRect CGRectNull

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

 

 

constCGRect 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是一个宏,定义了分割的方式如下:

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

 

 

 

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

将字典转化为矩形

目录
相关文章
|
10月前
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
278 0
|
10月前
|
安全 编译器 开发工具
​iOS安全加固方法及实现
​iOS安全加固方法及实现
99 0
​iOS安全加固方法及实现
|
10月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
iOS开发 开发者
📝 App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
在iOS应用程序开发过程中,进行App备案并获取公钥及证书SHA-1指纹是至关重要的步骤。本文将介绍如何通过appuploader工具获取iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹,帮助开发者更好地理解和应用该过程。
|
10月前
|
存储 iOS开发 开发者
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
144 0
|
10月前
|
小程序 前端开发 Android开发
解决小程序中textarea ios端样式不兼容的两种方法
解决小程序中textarea ios端样式不兼容的两种方法
254 0
|
7月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
4月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
83 2
|
7月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
351 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
6月前
|
Swift iOS开发
6-7|IOS如何定义一个类
6-7|IOS如何定义一个类

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 7
    iOS各个证书生成细节
  • 8
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 9
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记5 Data Structures、Methods、Properties
  • 10
    iOS:应用程序的线程安全性
  • 1
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    110
  • 2
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    18
  • 3
    iOS各个证书生成细节
    27
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    146
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    47
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    59
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    42
  • 9
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    162
  • 10
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    331