典型的答案是"你可以将它转换为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] ];
答案 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
内部如何运作。这为您提供了如何解决这个问题的提示。isCGPoint
函数,因此您可以使用NSValue
测试是否实际创建了给定的[NSValue valueWithCGPoint:]
实例。我之前的回答检查了这一点,但我认为在任何地方都可以检查。在任何情况下,它都包括在这里用于教学目的。答案 1 :(得分:0)
onView(withId(R.id.list_product)).perform(longClick());
以上是来自记忆。我还没有使用malloc(),所以你可能需要调整语法。