使用核心图,如何将触摸点转换为绘图空间?

时间:2010-07-17 08:35:13

标签: iphone objective-c core-plot

我有一个非常简单的图表,我想启用触控,我有 第一部分工作:

plotSpace.delegate = self;

和方法:

-(BOOL)plotSpace:(CPPlotSpace *)space
shouldHandlePointingDeviceDownEvent:(id)event atPoint:(CGPoint)point
{
    NSLog(@"touched at: x: %f y: %f", point.x, point.y);
}

如何将点“点”转换为图表的绘图空间?

我可以看到方法,但我不确定如何使用它们,doco, 虽然很大,但并不能很好地描述它们:)

非常感谢 马克

2 个答案:

答案 0 :(得分:6)

这就是我正在使用的:

NSDecimal plotPoint[2]; 
CPXYPlotSpace *xySpace = (CPXYPlotSpace *)space; 
[xySpace plotPoint:plotPoint forPlotAreaViewPoint:point]; 

NSlog(@"plotPoint = %@, %@", 
[[NSDecimalNumber decimalNumberWithDecimal:plotPoint[CPCoordinateX]] intValue],
[[NSDecimalNumber decimalNumberWithDecimal:plotPoint[CPCoordinateY]] doubleValue]);

我猜你可以将CPXYPlotSpace更改为CPPlotSpace,在我的绘图中,绘图空间是CPXYPlotSpace,因此plotPoint:forPlotAreaViewPoint方法接受 2 NSDecimal值的数组。

同样在我的情节中,x值都是整数,y值都是双精度。

答案 1 :(得分:2)

我不得不承认,我忘记了这个问题,感谢Steve的回复。

我确实也解决了,这是我的实现(即时扩展CPXYGraph

-(BOOL)plotSpace:(CPPlotSpace *)space shouldHandlePointingDeviceDownEvent:(id)event atPoint:(CGPoint)point {

    CPScatterPlot *plot = (CPScatterPlot*)[[self allPlots] objectAtIndex: 0];
    CGPoint pointInPlotArea = [plot convertPoint:point toLayer:plot];

    if ([plot containsPoint:pointInPlotArea]) {
        CPXYPlotSpace *plotSpace = (CPXYPlotSpace*)[self defaultPlotSpace];
        NSDecimal touchDataPoint[2];
        [plotSpace plotPoint:touchDataPoint forPlotAreaViewPoint:pointInPlotArea];
    }
}
然后,

touchDataPoint包含用户触摸的坐标。