【发布时间】:2013-09-12 19:30:46
【问题描述】:
我想创建一个类别来“扩展” CGPath 的“类”并添加更多功能。因为 CGPath 不是 ObjectiveC 的常规对象,我该怎么做?
请原谅我对 c/c++ 缺乏了解
【问题讨论】:
标签: ios cocoa-touch cgpath
我想创建一个类别来“扩展” CGPath 的“类”并添加更多功能。因为 CGPath 不是 ObjectiveC 的常规对象,我该怎么做?
请原谅我对 c/c++ 缺乏了解
【问题讨论】:
标签: ios cocoa-touch cgpath
很简单,你只需编写 C 函数。不过,您应该小心名称冲突,因此请在函数名称中添加前缀。如果您需要一个从NSData* 或某事物创建CGPath 的函数。像这样,您只需声明并实现一个名为 RDCGPathCreateWithData(NSData *data) 的 C 函数(使用 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 文件中的预处理器指令称为包含防护。它们可以防止您因多次使用相同的声明而出错。
【讨论】:
您可能想查看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.
}
【讨论】:
你不能像CGPathRef这样向C“对象”添加类别。类别是一个 ObjC 功能。但无论如何都没有理由。只需创建一个采用CGPathRef 的新函数。
【讨论】: