0

我想创建一个类别来“扩展” CGPath 的“类”并添加更多功能。因为 CGPath 不是 ObjectiveC 的常规对象,我该怎么做?

请原谅我对 c/c++ 缺乏了解

4

3 回答 3

1

你可能想看看UIBezierPathCGPath它包装了一个可以扩展的 Objective-C API 。

除此之外,如果您查看如何修改 CGPaths,您只需调用 C 函数来添加点和移动,因此您可以创建自己的函数,例如:

void myCGPathStarInRect(CGPathRef path, CGRect rect) {
    CGPathMoveTo(path, NULL, CGRectGetMidX(rect), CGRectGetMinY(rect));
    // ... draw the rest of the star.
}
于 2013-09-12T19:38:08.097 回答
1

您不能将类别添加到 C“对象”,例如CGPathRef. 类别是一个 ObjC 功能。但无论如何都没有理由。只需创建一个需要CGPathRef.

于 2013-09-12T19:38:42.087 回答
1

很简单,你只需要编写 C 函数。不过,您应该小心名称冲突,因此请在函数名称中添加前缀。如果您需要一个创建CGPathfromNSData*或 sth 的函数。像这样,您只需声明并实现一个名为的 C 函数RDCGPathCreateWithData(NSData *data)(使用 RubberDuck 的 RD 前缀;D)。

在你的头文件中,只需声明函数,并在实现文件中实现它们。对于我的示例,这看起来像这样:

RDCGPath.h

#ifndef RDCGPATH_H
#define RDCGPATH_H

CGPathRef RDCGPathCreateWithData(NSData *data);
// any other function declarations

#endif

RDCGPath.m

#include "RDCGPath.h"

CGPathRef RDCGPathCreateWithData(NSData *data) {
    //...
}

// imlementation of other functions

.h 文件中的预处理器指令称为包含防护。由于多次声明相同,它们可以保护您免受错误的影响。

于 2013-09-12T20:06:54.060 回答