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

Posted

技术标签:

【中文标题】如何将CGContextAddArc(CGContextRef)中的所有点存储到NSMUtableArray【英文标题】:How can store all points in the CGContextAddArc (CGContextRef) to NSMUtableArray 【发布时间】:2012-07-12 04:48:15 【问题描述】:

如何将 CGContextAddArc 中的所有像素点存储到 NSMutableArray.or 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=????
        

IMAGE

【问题讨论】:

你想在 NSMutableArray 中存储 CGPoints 即像素位置吗? 我想你在这里得到一个点,即点 = (x,y)。我说的对吗? 不,我想检查用户接触点是否包含在弧中 你所说的“所有点”是什么意思?你是指贝塞尔曲线的控制点吗? 【参考方案1】:

在 NSValue 中存储或当您想在数组中添加点时,您的 CGPoint,

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

现在在检索时,您将如何从 NSVaule stroe 数组中读取 CGPoint,

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

thePoint 将是您的答案。

【讨论】:

来自 CGContextRef 我想要所有点或(CGContextAddArc 点) 我想检查用户接触点是否包含在弧中 @MUSTHAFA 你的问题有什么解决方案吗? @MUSTHAFA 是的,我需要样品一。你能在这里回答吗。【参考方案2】:

Musthafa,你有几个不同的问题。

第一点是您可能以错误的方式处理此问题。要检查用户是否单击了弧线,您最好使用弧线 (CGPathAddArc) 创建路径,然后使用 CGPathContainsPoint。

接下来,您要确定弧线是您真正想要的,这看起来不像是饼图,弧线是饼图外侧的部分,而 close 将连接其末端,对于饼形,您需要在中心之间来回移动。

如果您尝试获取闭合弧中的点,我能想到的唯一方法是创建一个 CGBitmapContext,然后渲染 CGContext 的路径,然后渲染 CGBitmapContextGetData 以获取支持数据。然后,您可以遍历它以获取设置点并将它们添加到您的 NSMutableArray,如 iHungry 建议的那样。

我可能还会质疑为什么要将它们放在可变数组中,因为如果您要遍历它们以进行触摸测试,它可能会变得很慢,最好将它们留在位图中:)

【讨论】:

正在尝试什么,当用户触摸饼图中的特定扇区时,我想弹出一些关于该视图的视图/标签。请参阅我更新我的问题 不要费心存储积分。照原样创建 CGPathRef,但添加到弧的闭合路径 (CGPathCloseSubpath)。在单击操作方法中将 CGPathRef 保存在属性中(不要忘记 CGPathRelease,ARC 不适用于 CG 内容),使用 CGPathContainsPoint(CGPathRef)

以上是关于如何将CGContextAddArc(CGContextRef)中的所有点存储到NSMUtableArray的主要内容,如果未能解决你的问题,请参考以下文章

cgcontextaddarc在swift3是哪个方法

在ios中以顺时针方向绘制弧线[重复]

使用偏移量缩放 vImage_Buffer - Cocoa Objective C

从圆形或甜甜圈中绘制线段

iOS 2D绘图详解(Quartz 2D)之路径(stroke,fill,clip,subpath,blend)

iOS 2D绘图 (Quartz2D)之路径(stroke,fill,clip,subpath,blend)