如何创建一个类来扩展CGPaths?

时间:2013-09-12 19:30:46

标签: ios cocoa-touch cgpath

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

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

3 个答案:

答案 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。它们可以保护您免于因多次声明相同的错误。