我想创建一个类别来“扩展”CGPath的“类”并添加更多功能。因为CGPath不是ObjectiveC的常规对象,我该怎么做?
请原谅我对c / c ++缺乏了解
答案 0 :(得分:1)
您可能需要查看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.
}
答案 1 :(得分:1)
您无法向{“1}}等C”对象添加类别。类别是ObjC功能。但无论如何也没有理由。只需创建一个带CGPathRef
的新函数。
答案 2 :(得分:1)
很简单,你只需编写C函数。您应该注意名称冲突,因此请在函数名称中添加前缀。如果您需要一个可以从CGPath
或者......创建NSData*
的函数。像这样,你只需要声明并实现一个名为RDCGPathCreateWithData(NSData *data)
的C函数(使用RD-prefix作为RubberDuck; 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文件中的预处理程序指令称为include guard。它们可以保护您免于因多次声明相同的错误。