如何将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的主要内容,如果未能解决你的问题,请参考以下文章
使用偏移量缩放 vImage_Buffer - Cocoa Objective C