【问题标题】:How to create a category to extend CGPaths?如何创建一个类别来扩展 CGPaths?
【发布时间】:2013-09-12 19:30:46
【问题描述】:

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

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

【问题讨论】:

    标签: ios cocoa-touch cgpath


    【解决方案1】:

    很简单,你只需编写 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 文件中的预处理器指令称为包含防护。它们可以防止您因多次使用相同的声明而出错。

    【讨论】:

      【解决方案2】:

      您可能想查看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.
      }
      

      【讨论】:

        【解决方案3】:

        你不能像CGPathRef这样向C“对象”添加类别。类别是一个 ObjC 功能。但无论如何都没有理由。只需创建一个采用CGPathRef 的新函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          • 1970-01-01
          • 1970-01-01
          • 2019-06-29
          • 2020-08-15
          相关资源
          最近更新 更多