如何将CGContextAddArc(CGContextRef)中的所有点存储到NSMUtableArray中?

6

如何将CGContextAddArc中的所有像素点存储到NSMutableArray中,或者将CGContextRef存储到NSMutable Array中?

static inline float radians(double degrees) 
{
 return degrees * PI / 180;
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect parentViewBounds = self.bounds;
    CGFloat x = CGRectGetWidth(parentViewBounds)/2;
    CGFloat y = CGRectGetHeight(parentViewBounds)/2;
    UIColor *rbg=[UIColor redColor];
    CGContextSetFillColor(context, CGColorGetComponents( [rbg CGColor]));
    CGContextMoveToPoint(context, x, y); 
    CGContextAddArc(context, x, y,100,radians(35),radians(105),0); 
        CGContextClosePath(context); 
        CGContextFillPath(context);
// here I want to store All points Containing in the Arc to NSMutableArray


 NSMutableArray *pointsArray=????
        }

IMAGEenter image description here


你想将CGPoints(即像素位置)存储在NSMutableArray中吗? - Tirth
我认为你在这里得到了一个要点,即点 =(x,y)。我说得对吗? - Prasad G
不,我想要检查用户触点是否包含在弧线内。 - Musthafa
“所有点”是什么意思?你是指贝塞尔曲线的控制点吗? - rob mayoff
2个回答

0

穆斯达法,你在这里有几个不同的问题。

首先,你可能走错了路。要检查用户是否点击了弧线,最好的方法是使用 CGPathAddArc 创建一条路径,然后使用 CGPathContainsPoint。

接下来,你需要确定弧形是否确实是你想要的,这不会像馅饼那样,弧形是馅饼外部的部分,而关闭将连接其末端,对于馅饼形状,你需要从中心移动到和移动回去。

如果你试图获取封闭弧线中的点,我能想到的唯一方法是创建一个 CGBitmapContext,然后将路径呈现给 CGContext,然后使用 CGBitmapContextGetData 获取后备数据。然后,你可以遍历它们以获取集合点,并像 iHungry 建议的那样将它们添加到 NSMutableArray 中。

我还可能会质疑为什么你要将它们放在可变数组中,因为如果你正在循环进行触摸测试,速度可能会变得非常慢,最好将它们留在位图中 :)


当用户触摸饼图中的特定部分时,我想弹出一些关于该视图的视图/标签。请注意,我更新了我的问题。 - Musthafa
不必存储这些点。 按照您的方式创建CGPathRef,但是在弧线上添加一个关闭路径(CGPathCloseSubpath)。 将CGPathRef保存在属性中(并不要忘记CGPathRelease它,因为ARC对CG内容无效)。 在您的点击操作方法中,使用CGPathContainsPoint(CGPathRef)。 - Gordon Dove

0

在编程中,如果你想把CGPoint存储到数组中或者添加到数组中,可以使用NSValue。

NSValue *point = [NSValue valueWithCGPoint:CGPointMake(your_X, your_Y)];
[pointsArray addObject:point];

现在在检索时,您将如何从存储在数组中的NSValue中读取CGPoint?

NSValue *getPoint = [pointsArray objectAtIndex:i];
CGPoint thePoint = [getPoint CGPointValue];

thePoint 将是你的答案。


从CGContextRef中,我想要所有的点或(CGContextAddArc点)。 - Musthafa
我想要检查用户触点是否包含在圆弧中。 - Musthafa
@MUSTHAFA 你有没有找到你问题的解决方案? - NSCry
@MUSTHAFA 是的,我需要一个样例。你能否在这里回答它呢? - NSCry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接