将NSMutableArray转换为CGPoint Array

时间:2015-10-26 16:12:58

标签: ios objective-c arrays cgpoint

典型的答案是"你可以将它转换为nsvalue然后使用[element CGPointValue]; 但在我的情况下,我需要生成CGPoint类型的数组,因为我需要它在下面的内置函数中:

static CGPathRef createClosedPathWithPoints(const CGPoint *points, size_t count) {
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddLines(path, NULL, points, count);
    CGPathCloseSubpath(path);
    return path;
}

所以,我需要传递确切的数据类型,因为我无法逐个元素地解析它,或者我需要一种方法来每次用户做出特定的操作,我将它的CGPoint添加到数组CGPoints :(( 提前致谢 编辑: 我已经尝试了malloc并制作了c数组但是函数的结果是不可取的,我测试了并且为了malloc数组的循环做了无穷大,并且它太大而不仅仅像我坐的那样,并且包含垃圾所以结果出错了

这是可变数组

pointToPoints = [NSMutableArray new];
[pointToPoints addObject:[NSValue valueWithCGPoint:tempPoint] ];

2 个答案:

答案 0 :(得分:1)

以下内容将使用您提供的代码,使用NSArray创建的NSValue CGPoint创建封闭路径:

BOOL isCGPoint(NSValue *value){
    return value && strcmp([value objCType], @encode(CGPoint)) == 0;
}

- (CGPathRef) closedPathFromPointArray:(NSArray *)points{
    CGMutablePathRef path = CGPathCreateMutable();

    if(points.count){
        CGPoint origin = ((NSValue *)points[0]).CGPointValue;
        CGPathMoveToPoint (path, NULL, origin.x, origin.y);

        // see https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGPath/#//apple_ref/c/func/CGPathAddLines
        for(NSValue *value in points){
            CGPathAddLineToPoint (path, NULL, value.CGPointValue.x, value.CGPointValue.y);
        }
    }

    CGPathCloseSubpath(path);
    return path;
}

如您所见,您实际上并不需要malloc,甚至不需要创建CGPoint的C数组。这假设您只需要此数组来创建闭合路径。 另外两件事需要注意:

  • 请参阅CGPathAddLines的评论链接,因为它描述了CGPathAddLines内部如何运作。这为您提供了如何解决这个问题的提示。
  • 包含isCGPoint函数,因此您可以使用NSValue测试是否实际创建了给定的[NSValue valueWithCGPoint:]实例。我之前的回答检查了这一点,但我认为在任何地方都可以检查。在任何情况下,它都包括在这里用于教学目的。

答案 1 :(得分:0)

   onView(withId(R.id.list_product)).perform(longClick());

以上是来自记忆。我还没有使用malloc(),所以你可能需要调整语法。