美文网首页
CGGeometry学习笔记

CGGeometry学习笔记

作者: 寻心_0a46 | 来源:发表于2020-03-19 21:04 被阅读0次

    结构定义

    /* Points. */
    struct
    CGPoint {
        CGFloat x;
        CGFloat y;
    };
    typedef struct CG_BOXABLE CGPoint CGPoint;
    
    /* Sizes. */
    
    struct CGSize {
        CGFloat width;
        CGFloat height;
    };
    typedef struct CG_BOXABLE CGSize CGSize;
    
    /* Vectors. */
    
    #define CGVECTOR_DEFINED 1
    
    struct CGVector {
        CGFloat dx;
        CGFloat dy;
    };
    typedef struct CG_BOXABLE CGVector CGVector;
    
    /* Rectangles. */
    
    struct CGRect {
        CGPoint origin;
        CGSize size;
    };
    typedef struct CG_BOXABLE CGRect CGRect;
    
    /* Rectangle edges. */
    
    typedef CF_CLOSED_ENUM(uint32_t, CGRectEdge) {
        CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge
    };
    
    

    常用常量

    CG_EXTERN const CGPoint CGPointZero
    CG_AVAILABLE_STARTING(10.0, 2.0);

    常量描述 : 具有位置(0,0)的点常量。零点相当于CGPointMake(0,0)。

    CG_EXTERN const CGPoint CGPointZero
          CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN const CGSize CGSizeZero
    CG_AVAILABLE_STARTING(10.0, 2.0);

    常量描述 : 宽度和高度为0的大小常量。零大小等于CGSizeMake(0,0)。

    CG_EXTERN const CGSize CGSizeZero
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN const CGRect CGRectZero
    CG_AVAILABLE_STARTING(10.0, 2.0);

    常量描述 : 位置(0,0)、宽度和高度为0的矩形常量。零矩形相当于CGRectMake(0,0,0,0)。

    CG_EXTERN const CGRect CGRectZero
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN const CGRect CGRectNull
    CG_AVAILABLE_STARTING(10.0, 2.0);

    常量描述 : 表示无效值的空矩形。例如,返会两个矩形相交时的矩形,但这两个矩形不相交。空矩形与零矩形不同。例如,矩形与空矩形的并集是原始矩形(即,空矩形不贡献任何内容)。

    CG_EXTERN const CGRect CGRectNull
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN const CGRect CGRectInfinite
    CG_AVAILABLE_STARTING(10.4, 2.0);

    常量描述 : 无限延伸的矩形。

    CG_EXTERN const CGRect CGRectInfinite
        CG_AVAILABLE_STARTING(10.4, 2.0);
    

    常用函数

    CG_INLINE CGPoint CGPointMake(CGFloat x, CGFloat y);

    函数描述 : 返回具有指定坐标的点。

    参数 :

    x : 要构造的点的x坐标。

    y : 要构造的点的y坐标。

    返回值 : 一个点。

    CG_INLINE CGPoint CGPointMake(CGFloat x, CGFloat y);
    

    CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height);

    函数描述 : 返回具有指定维度值的大小。

    参数 :

    width : 一个宽度值。

    height : 一个高度值。

    返回值 : 返回具有指定宽度和高度的CGSize结构。

    CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height);
    

    CG_INLINE CGVector CGVectorMake(CGFloat dx, CGFloat dy);

    函数描述 : 返回具有指定维值的向量。

    参数 :

    dx : 要构造的向量的x坐标。

    dy : 要构造的向量的y坐标。

    返回值 : 返回具有指定坐标的CGVector结构。

    CG_INLINE CGVector CGVectorMake(CGFloat dx, CGFloat dy);
    

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

    函数描述 : 返回具有指定坐标和大小值的矩形。

    参数 :

    x : 矩形原点的x坐标。

    y : 矩形原点的y坐标。

    width : 矩形的宽度。

    height : 矩形的高度。

    返回值 : 具有指定位置和大小的矩形。

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

    CG_EXTERN CGFloat CGRectGetMinX(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形x坐标的最小值。

    参数 :

    rect : 要检查的矩形。

    返回值 : 矩形x坐标的最小值。

    CG_EXTERN CGFloat CGRectGetMinX(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetMidX(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回建立矩形中心的x坐标。

    参数 :

    rect : 要检查的矩形。

    返回值 : 指定矩形中心的x坐标。

    CG_EXTERN CGFloat CGRectGetMidX(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetMaxX(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形的x坐标的最大值。

    参数 :

    rect : 要检查的矩形。

    返回值 : 矩形的x坐标的最大值。

    CG_EXTERN CGFloat CGRectGetMaxX(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetMinY(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形y坐标的最小值。

    参数 :

    rect : 要检查的矩形。

    返回值 : 矩形y坐标的最小值。

    CG_EXTERN CGFloat CGRectGetMinY(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetMidY(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回建立矩形中心的y坐标。

    参数 :

    rect : 要检查的矩形。

    返回值 : 指定矩形中心的y坐标。

    CG_EXTERN CGFloat CGRectGetMidY(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetMaxY(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形的y坐标的最大值。

    参数 :

    rect : 要检查的矩形。

    返回值 : 矩形的y坐标的最大值。

    CG_EXTERN CGFloat CGRectGetMaxY(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetWidth(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形的宽度。无论CGRect数据结构中存储的宽度是正数还是负数,该函数都将返回宽度,就像对矩形进行了标准化一样。也就是说,结果决不是负数。

    参数 :

    rect : 要检查的矩形。

    返回值 : 指定矩形的宽度。

    CG_EXTERN CGFloat CGRectGetWidth(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGFloat CGRectGetHeight(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形的高度。无论在CGRect数据结构中存储的高度是正数还是负数,该函数都将返回高度,就好像对矩形进行了标准化一样。也就是说,结果决不是负数。

    参数 :

    rect : 要检查的矩形。

    返回值 : 指定矩形的高度。

    CG_EXTERN CGFloat CGRectGetHeight(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGPointEqualToPoint(CGPoint point1, CGPoint point2)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回两个点是否相等。

    参数 :

    point1 : CGPoint结构。

    point2 : CGPoint结构。

    返回值 : 一个布尔值,指示是否相等。

    CG_EXTERN bool CGPointEqualToPoint(CGPoint point1, CGPoint point2)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGSizeEqualToSize(CGSize size1, CGSize size2)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 :返回两个大小是否相等。

    参数 :

    size1 : CGSize结构。

    size2 : CGSize结构。

    返回值 : 一个布尔值,指示是否相等。

    CG_EXTERN bool CGSizeEqualToSize(CGSize size1, CGSize size2)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGRectEqualToRect(CGRect rect1, CGRect rect2)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回两个矩形的大小和位置是否相等。

    参数 :

    rect1 : 要检查的第一个矩形。

    rect2 : 要检查的第二个矩形。

    返回值 : 如果两个指定的矩形具有相同的大小和原点值,或者两个矩形都是空矩形,则为YES,否则为NO。

    CG_EXTERN bool CGRectEqualToRect(CGRect rect1, CGRect rect2)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGRect CGRectStandardize(CGRect rect) attribute ((warn_unused_result))
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回宽度和高度为正的矩形。

    参数 :

    rect : 源矩形。

    返回值 : 表示源矩形但宽度和高度值为正值的矩形。如果rect是空矩形,则返回空矩形。

    CG_EXTERN CGRect CGRectStandardize(CGRect rect) __attribute__ ((warn_unused_result))
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGRectIsEmpty(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形的宽度或高度是否为零,或是否为空矩形。空矩形要么是空矩形,要么是高度或宽度为零的有效矩形。

    参数 :

    rect : 要检查的矩形。

    返回值 : 如果指定的矩形为空,则为“YES”;否则为“NO”。

    CG_EXTERN bool CGRectIsEmpty(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGRectIsNull(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形是否等于空矩形。例如,两个不相交矩形相交的结果是一个空矩形。不能绘制空矩形,也不能以特殊方式与其他矩形交互。

    参数 :

    rect : 要检查的矩形。

    返回值 :如果指定的矩形为空,则为“YES”;否则为“NO”。

    CG_EXTERN bool CGRectIsNull(CGRect rect)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGRectIsInfinite(CGRect rect)
    CG_AVAILABLE_STARTING(10.4, 2.0);

    函数描述 : 返回矩形是否为无穷大。无限矩形是没有定义边界的矩形。可以创建无限矩形作为平铺过滤器的输出。

    参数 :

    rect :要检查的矩形。

    返回值 : 如果指定的矩形是无限的,则返回“YES”;否则返回“NO”。

    CG_EXTERN bool CGRectIsInfinite(CGRect rect)
        CG_AVAILABLE_STARTING(10.4, 2.0);
    

    CG_EXTERN CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy) attribute ((warn_unused_result))
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回一个比源矩形更小或更大、具有相同中心点的矩形。将矩形标准化,然后应用插入参数。如果结果矩形的高度或宽度为负,则返回空矩形。

    参数 :

    rect : 源CGRect结构。

    dx : 用于调整源矩形的x坐标值。若要创建插入矩形,请指定正值。若要创建更大的包围矩形,请指定负值。

    dy : 用于调整源矩形的y坐标值。若要创建插入矩形,请指定正值。若要创建更大的包围矩形,请指定负值。

    返回值 : 一个矩形。原点值在x轴上偏移dx参数指定的距离,在y轴上偏移dy参数指定的距离,其大小相对于源矩形调整(2dx,2dy)。如果dx和dy为正值,则矩形的大小减小。如果dx和dy为负值,则矩形的大小将增大。

    CG_EXTERN CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy) __attribute__ ((warn_unused_result))
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGRect CGRectIntegral(CGRect rect) attribute ((warn_unused_result))
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回将源矩形值转换为整数后得到的最小矩形。

    参数 :

    rect : 源矩形。

    返回值 : 包含源矩形的原点和大小为最小整数值的矩形。也就是说,对于具有分数原点或大小值的矩形,CGRectIntegral将矩形的原点向下舍入,将其大小向上舍入到最接近的整数,从而使结果包含原始矩形。如果rect是空矩形,则返回空矩形。

    CG_EXTERN CGRect CGRectIntegral(CGRect rect) __attribute__ ((warn_unused_result))
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CGRect CGRectUnion(CGRect r1, CGRect r2) attribute ((warn_unused_result))
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回包含两个源矩形的最小矩形。在计算并之前,两个矩形都是标准化的。如果其中一个矩形为空矩形,则返回另一个矩形的副本(如果两个矩形都为空,则生成空矩形)。否则将返回完全包含源矩形的矩形。

    参数 :

    r1 : 第一个源矩形。

    r2 : 第二个源矩形。

    返回值 : 完全包含两个源矩形的最小矩形。

    CG_EXTERN CGRect CGRectUnion(CGRect r1, CGRect r2) __attribute__ ((warn_unused_result))
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    例如 :

    - (void)viewDidLoad {
        
        [super viewDidLoad];
        self.navigationItem.title = @"测试代码控制器";
        
        self.view1 = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 150 / 2, CGRectGetMaxY(self.view.frame) / 2 - 150 / 2, 150, 150)];
        self.view1.backgroundColor = [UIColor redColor];
        [self.view addSubview:self.view1];
        
        self.view2 = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 150 / 2, CGRectGetMinY(self.view1.frame) + 30, 150, 150)];
        self.view2.backgroundColor = [UIColor greenColor];
        [self.view addSubview:self.view2];
        
        self.view3 = [[UIView alloc]initWithFrame:CGRectUnion(self.view1.frame, self.view2.frame)];
        self.view3.backgroundColor = [UIColor clearColor];
        self.view3.layer.borderWidth = 5.0;
        self.view3.layer.borderColor = [UIColor yellowColor].CGColor;
        [self.view addSubview:self.view3];
    }
    
    

    样式如下 :

    截屏2020-03-17下午11.13.54.png

    CG_EXTERN CGRect CGRectIntersection(CGRect r1, CGRect r2) attribute ((warn_unused_result))
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回两个矩形的交集,这两个矩形在计算交集之前都是标准化的。

    参数 :

    r1 : 第一个源矩形。

    r2 : 第二个源矩形。

    返回值 : 表示两个指定矩形的交点的矩形。如果两个矩形不相交,则返回空矩形。检查此条件,可以使用CGRectIsNull。

    CG_EXTERN CGRect CGRectIntersection(CGRect r1, CGRect r2) __attribute__ ((warn_unused_result))
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    例如 :

    - (void)viewDidLoad {
        
        [super viewDidLoad];
        self.navigationItem.title = @"测试代码控制器";
        
        self.view1 = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 150 / 2, CGRectGetMaxY(self.view.frame) / 2 - 150 / 2, 150, 150)];
        self.view1.backgroundColor = [UIColor redColor];
        [self.view addSubview:self.view1];
        
        self.view2 = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 150 / 2, CGRectGetMinY(self.view1.frame) + 30, 150, 150)];
        self.view2.backgroundColor = [UIColor greenColor];
        [self.view addSubview:self.view2];
        
        self.view3 = [[UIView alloc]initWithFrame:CGRectIntersection(self.view1.frame, self.view2.frame)];
        self.view3.backgroundColor = [UIColor yellowColor];
        [self.view addSubview:self.view3];
    
    }
    
    

    样式如下 :

    截屏2020-03-18上午9.06.31.png

    CG_EXTERN CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy) attribute ((warn_unused_result))
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回一个原点与源矩形偏移的矩形。

    参数 :

    rect : 源矩形。

    dx : x坐标的偏移量。

    dy : y坐标的偏移量。

    返回值 : 与源矩形相同大小的矩形,但其原点在x轴上的偏移量是dx单位,在y轴上的偏移量是dy单位。如果rect是空矩形,则返回空矩形。

    CG_EXTERN CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy) __attribute__ ((warn_unused_result))
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    例如 :

    - (void)viewDidLoad {
        
        [super viewDidLoad];
        self.navigationItem.title = @"测试代码控制器";
        
        self.view1 = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 150 / 2, CGRectGetMaxY(self.view.frame) / 2 - 150 / 2, 150, 150)];
        self.view1.backgroundColor = [UIColor redColor];
        [self.view addSubview:self.view1];
        
        self.view2 = [[UIView alloc]initWithFrame:CGRectOffset(self.view1.frame, 50, 50)];
        self.view2.backgroundColor = [UIColor greenColor];
        [self.view addSubview:self.view2];
    
    }
    
    

    样式如下 :

    截屏2020-03-18上午8.58.27.png

    CG_EXTERN void CGRectDivide(CGRect rect, CGRect * slice,
    CGRect * remainder, CGFloat amount, CGRectEdge edge)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 将源矩形分为两个组件矩形。如果rect是空矩形,则此函数将切片矩形和余数矩形输出CGRectNull。

    参数 :

    rect : 源矩形(要切分的对象)。

    slice : 在输入时,指向未初始化矩形的指针。返回时,将使用指定的边缘和值填充矩形,这些值将扩展到amount参数指定的边缘之外的距离。不能为空(一个指向切割出的CGRect的指针)。

    remainder : 在输入时,指向未初始化矩形的指针。在返回时,矩形包含源矩形在CGRectEdge生成“切片”矩形后剩余的部分。不能为空(指向切割后剩下的CGRect的指针)。

    amount : 在edge参数中指定的到矩形边的距离。这个距离定义了与指定边平行的线,核心图形使用它来划分源矩形(要切割的大小)。

    edge : 一个边缘值,它指定测量amount参数中传递的距离的矩形的边。CGRectDivide生成一个“切片”矩形,其中包含指定的边并将数量距离扩展到它之外(edge是一个枚举值,代表 amount 开始计算的方向)。

    CG_EXTERN void CGRectDivide(CGRect rect, CGRect *  slice,
        CGRect *  remainder, CGFloat amount, CGRectEdge edge)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    例如 : 矩形切割(参考https://blog.csdn.net/Dancer2015的博客,人家的想法是好):

    - (void)viewDidLoad {
        
        [super viewDidLoad];
        self.navigationItem.title = @"测试代码控制器";
        ///背景视图
        UIView *backgroundView = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetMaxX(self.view.frame) / 2 - 240 / 2, CGRectGetMaxY(self.view.frame) / 2 - 190 / 2, 240, 190)];
        backgroundView.backgroundColor = [UIColor whiteColor];
        backgroundView.layer.shadowColor = [UIColor blackColor].CGColor;
        backgroundView.layer.shadowOffset = CGSizeMake(0, 0);
        backgroundView.layer.shadowOpacity = 1;
        [self.view addSubview:backgroundView];
        ///设置网格视图
        //每个网格视图宽
        CGFloat gridViewWidth = 40.0;
        //每个网格视图高
        CGFloat gridViewHeight = 30.0;
        //每个网格视图X轴方向间距
        CGFloat paddingX = 10.0;
        //每个网格视图Y轴方向间距
        CGFloat paddingY = 10.0;
        //网格视图的行数
        NSInteger numberOfRow = 5;
        //网格视图的列数
        NSInteger numberOfColumn = 5;
        
        CGRect slice, rowRemainder, columnRemainder;
        
        rowRemainder = backgroundView.bounds;
        for (NSInteger i = 0; i < numberOfRow; i++) {
            //行切割,循环一次切割出两行,一行为视图,一行为间距
            RectCuttingWithPadding(rowRemainder, &slice, &rowRemainder, gridViewHeight, paddingY, CGRectMinYEdge);
            columnRemainder = slice;
            for (NSInteger j = 0; j < numberOfColumn; j++) {
                //列切割,对切割出两行进行多次列切割
               RectCuttingWithPadding(columnRemainder, &slice, &columnRemainder, gridViewWidth, paddingX, CGRectMinXEdge);
                [self addGridView:slice withSuperView:backgroundView];
            }
        }
    }
    
    ///添加网格视图
    - (void)addGridView:(CGRect)rect withSuperView:(UIView *)superView{
        
        UIView *gridView = [[UIView alloc] initWithFrame:rect];
        gridView.backgroundColor = [UIColor colorWithHue:drand48()
                                          saturation:1.0
                                          brightness:1.0
                                               alpha:1.0];
        gridView.layer.borderColor = [[UIColor grayColor] CGColor];
        gridView.layer.borderWidth = 0.5;
        [superView addSubview:gridView];
    }
    
    ///矩形切割
    void RectCuttingWithPadding(CGRect rect, CGRect *slice, CGRect *remainder, CGFloat amount, CGFloat padding, CGRectEdge edge) {
     
        CGRect tmpSlice;
     
        CGRectDivide(rect, &tmpSlice, &rect, amount, edge);
        if (slice) {
            *slice = tmpSlice;
        }
     
        CGRectDivide(rect, &tmpSlice, &rect, padding, edge);
        if (remainder) {
            *remainder = rect;
        }
    }
    
    

    效果如图 :

    截屏2020-03-19上午9.58.52.png

    CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回矩形是否包含指定点。如果某个点的坐标位于矩形内部或最小X或最小Y边上,则该点被视为位于矩形内部。

    参数 :

    rect : 要检查的矩形。

    point : 检查的重点。

    返回值 : 如果矩形不为空,且点位于矩形内,则为“YES”;否则为“NO”。

    CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGRectContainsRect(CGRect rect1, CGRect rect2)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回第一个矩形是否包含第二个矩形。

    参数 :

    rect1 : 要检查在rect2中传递的矩形的包含性的矩形。

    rect2 : 要检查的矩形是否包含在rect1中传递的矩形中。

    返回值 : 如果rect2指定的矩形包含在rect1中传递的矩形中,则为“YES”;否则为“NO”。如果两个矩形的并集等于第一个矩形,则第一个矩形包含第二个矩形。

    CG_EXTERN bool CGRectContainsRect(CGRect rect1, CGRect rect2)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN bool CGRectIntersectsRect(CGRect rect1, CGRect rect2)
    CG_AVAILABLE_STARTING(10.0, 2.0);

    函数描述 : 返回两个矩形是否相交。

    参数 :

    rect1 : 要检查的第一个矩形。

    rect2 : 要检查的第二个矩形。

    返回值 : 如果两个指定矩形相交,则为“YES”;否则为“NO”。如果矩形的交点不等于空矩形,则第一个矩形与第二个矩形相交。

    CG_EXTERN bool CGRectIntersectsRect(CGRect rect1, CGRect rect2)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    CG_EXTERN CFDictionaryRef CGPointCreateDictionaryRepresentation(
    CGPoint point)
    CG_AVAILABLE_STARTING(10.5, 2.0);

    函数描述 : 返回指定点的字典表示形式。

    参数 :

    point : 一个点。

    返回值 : 点的字典表示法。

    CG_EXTERN CFDictionaryRef  CGPointCreateDictionaryRepresentation(
        CGPoint point)
        CG_AVAILABLE_STARTING(10.5, 2.0);
    

    CG_EXTERN bool CGPointMakeWithDictionaryRepresentation(
    CFDictionaryRef cg_nullable dict, CGPoint * cg_nullable point)
    CG_AVAILABLE_STARTING(10.5, 2.0);

    函数描述 : 使用指定字典的内容填充点。

    参数 :

    dict : 以前从函数CGPointCreateDictionaryRepresentation返回的字典。

    point : 返回时,从提供的字典创建的点。

    返回值 : 如果成功,则为“YES”;否则为“NO”。

    CG_EXTERN bool CGPointMakeWithDictionaryRepresentation(
        CFDictionaryRef cg_nullable dict, CGPoint * cg_nullable point)
        CG_AVAILABLE_STARTING(10.5, 2.0);
    

    CG_EXTERN CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size)
    CG_AVAILABLE_STARTING(10.5, 2.0);

    函数描述 : 返回指定大小的字典表示形式。

    参数 :

    size : 一个尺寸。

    返回值 :大小的字典表示形式。

    CG_EXTERN CFDictionaryRef  CGSizeCreateDictionaryRepresentation(CGSize size)
        CG_AVAILABLE_STARTING(10.5, 2.0);
    

    CG_EXTERN bool CGSizeMakeWithDictionaryRepresentation(
    CFDictionaryRef cg_nullable dict, CGSize * cg_nullable size)
    CG_AVAILABLE_STARTING(10.5, 2.0);

    函数描述 : 使用指定字典的内容填充大小。

    参数 :

    dict : 以前从函数CGSizeCreateDictionaryRepresentation返回的字典。

    size : 返回时,从指定字典创建的大小。

    返回值 : 如果成功,则为“YES”;否则为“NO”。

    CG_EXTERN bool CGSizeMakeWithDictionaryRepresentation(
        CFDictionaryRef cg_nullable dict, CGSize * cg_nullable size)
        CG_AVAILABLE_STARTING(10.5, 2.0);
    

    CG_EXTERN CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect)
    CG_AVAILABLE_STARTING(10.5, 2.0);

    函数描述 : 返回所提供矩形的字典表示形式。

    参数 :

    rect : 一个矩形。

    返回值 : 矩形的字典表示形式。

    CG_EXTERN CFDictionaryRef  CGRectCreateDictionaryRepresentation(CGRect)
        CG_AVAILABLE_STARTING(10.5, 2.0);
    

    CG_EXTERN bool CGRectMakeWithDictionaryRepresentation(
    CFDictionaryRef cg_nullable dict, CGRect * cg_nullable rect)
    CG_AVAILABLE_STARTING(10.5, 2.0);

    函数描述 : 使用指定字典的内容填充矩形。

    参数 :

    dict : 以前从函数CGRectCreateDictionaryRepresentation返回的字典。

    rect : 返回时,从指定字典创建的矩形。

    返回值 : 如果成功,则为“YES”;否则为“NO”。

    CG_EXTERN bool CGRectMakeWithDictionaryRepresentation(
        CFDictionaryRef cg_nullable dict, CGRect * cg_nullable rect)
        CG_AVAILABLE_STARTING(10.5, 2.0);
    

    /*** 内联函数的定义 ***/

    CG_INLINE CGPoint
    CGPointMake(CGFloat x, CGFloat y)
    {
      CGPoint p; p.x = x; p.y = y; return p;
    }
    
    CG_INLINE CGSize
    CGSizeMake(CGFloat width, CGFloat height)
    {
      CGSize size; size.width = width; size.height = height; return size;
    }
    
    CG_INLINE CGVector
    CGVectorMake(CGFloat dx, CGFloat dy)
    {
      CGVector vector; vector.dx = dx; vector.dy = dy; return vector;
    }
    
    CG_INLINE CGRect
    CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
    {
      CGRect rect;
      rect.origin.x = x; rect.origin.y = y;
      rect.size.width = width; rect.size.height = height;
      return rect;
    }
    
    CG_INLINE bool
    __CGPointEqualToPoint(CGPoint point1, CGPoint point2)
    {
      return point1.x == point2.x && point1.y == point2.y;
    }
    #define CGPointEqualToPoint __CGPointEqualToPoint
    
    CG_INLINE bool
    __CGSizeEqualToSize(CGSize size1, CGSize size2)
    {
      return size1.width == size2.width && size1.height == size2.height;
    }
    
    #define CGSizeEqualToSize __CGSizeEqualToSize
    
    CF_ASSUME_NONNULL_END
    
    CF_IMPLICIT_BRIDGING_DISABLED
    
    #endif /* CGGEOMETRY_H_ */
    

    相关文章

      网友评论

          本文标题:CGGeometry学习笔记

          本文链接:https://www.haomeiwen.com/subject/nruwehtx.html