我想创建一个类别来“扩展” CGPath 的“类”并添加更多功能。因为 CGPath 不是 ObjectiveC 的常规对象,我该怎么做?
请原谅我对 c/c++ 缺乏了解
我想创建一个类别来“扩展” CGPath 的“类”并添加更多功能。因为 CGPath 不是 ObjectiveC 的常规对象,我该怎么做?
请原谅我对 c/c++ 缺乏了解
你可能想看看UIBezierPath
。CGPath
它包装了一个可以扩展的 Objective-C API 。
除此之外,如果您查看如何修改 CGPaths,您只需调用 C 函数来添加点和移动,因此您可以创建自己的函数,例如:
void myCGPathStarInRect(CGPathRef path, CGRect rect) {
CGPathMoveTo(path, NULL, CGRectGetMidX(rect), CGRectGetMinY(rect));
// ... draw the rest of the star.
}
您不能将类别添加到 C“对象”,例如CGPathRef
. 类别是一个 ObjC 功能。但无论如何都没有理由。只需创建一个需要CGPathRef
.
很简单,你只需要编写 C 函数。不过,您应该小心名称冲突,因此请在函数名称中添加前缀。如果您需要一个创建CGPath
fromNSData*
或 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 文件中的预处理器指令称为包含防护。由于多次声明相同,它们可以保护您免受错误的影响。