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;

};

定义一个矩形

二、几个系统定义的量

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

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

将字典转化为矩形

时间: 2024-07-30 08:10:42

IOS(CGGeometry)几何类方法总结的相关文章

IOS开发几何类方法 CGGeometry.h文件

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

IOS基础——静态方法(类方法)和实例方法

1.实例方法/动态方法 a).标识符:- b).调用方式:(实例对象    函数) c).实例方法在堆栈上. 2.静态方法/类方法 a).标识符:+ b).调用方式:(类    函数) c).静态方法在堆上分配内存. 3.静态方法和实例方法的区分 a).静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存.事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载.调用的速度基本上没有差别. b).静态方法在堆上分配内存,实例方法在堆栈上.事实上所

iOS,非视图类方法

1.判断类的实例 判断类的实例 isKindOfClass        //判断是否是这个类或者这个类的子类的实例 例:[mystring isKindOfClass:[NSString class]] isMemberOfClass  //判断是否是这个类的实例 例:[mystring isMemberOfClass:[NSString class]]

实例方法与类方法区别

Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工厂方法的称谓明显和一般意义上的工厂方法不同,从本质上来说,类方法可以独立于对象而执行,所以在其他的语言里面类方法有的时候被称为静态方法.注意点一:类方法1,类方法可以调用类方法.2,类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法.3,类方法不可以使用实例变量.类方法可以使用self,因为s

ios开发中类方法与self的注意点 与实例方法区别

Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工厂方法的称谓明显和一般意义上的工厂方法不同,从本质上来说,类方法可以独立于对象而执行,所以在其他的语言里面类方法有的时候被称为静态方法. 注意点一:类方法 1,类方法可以调用类方法. 2,类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法. 3,类方法不可以使用实例变量.类方法可以使用self

ios开发总结:Utils常用方法等收集,添加扩展类,工具类方法,拥有很多方便快捷功能(不断更新中。。。)

BOBUtils 工具大全 本人github开源和收集功能地址:https://github.com/niexiaobo [对ios新手或者工作一年以内开发人员很有用处] 常用方法等收集.添加扩展类.工具类方法.请求方法封装(包括图片上传等)等等 拥有很多方便快捷功能 ^_^ 用法: 只需要导入BOBsKit.h 头文件就行 // #import "BOBsKit.h" 依赖三方库: pod 'SDWebImage', '~> 3.7.5' pod 'MBProgressHUD'

IOS Category不要重写原有类方法

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 总结出来一句话 如果要重写现有类的方法,请考虑使用继承. ------- 前言: Category是一种向现有类中添加方法,而不需要继承或者改变现有类的方式.在IOS开发中,使用还是十分广发的.例如在CoreData中,用category来为NSManagedObject类添加适当方法. FAQ: 为什么不直接把方法放到ViewController中? 因为,如果把这些代码都放到Controller中,会造成Contr

iOS 快速创建对象的类方法里的self

快速创建对象的类方法的进化历程: 原始版本: + (Book *)book { return [ [ [Book alloc ] init ] autorelease ]; } 进化一版本: + (id)book { return [ [ [self alloc ] init ] autorelease ]; } 进化二版本: + (instancetype)book { return [ [ [self alloc ] init ] autorelease ]; } 进化一版本比原始版本优的地

IOS UIImage类方法总结

IOS中对图片的处理 UIImage 相信做项目时肯定会有用到 UIImage 这个类,那我们就来看一下这个类中都有什么内容. 其实这篇文章就是在看文档的时候想记录一下文档中得方法. UIImage 继承于NSObject 下面介绍一下UIImage中的方法 首先是我们最常用的 通过图片的文件名来获取这个图片 + (UIImage *)imageNamed:(NSString *)name //要注意的是这个方法适用于已经导入到工程中的图片 创建新图片 1.+ (UIImage *)imageW