我对CorePlot有疑问。我的问题是: 我画了一条曲线。下一个任务是:曲线选择。 我添加了处理程序:
但这不起作用。 有任何想法吗? 感谢。
- (BOOL)npvCurveContainPoint:(CGPoint)point
{
if ([[graph allPlots] count] == 0) {
return NO;
}
CPTPlot* plot = [graph plotAtIndex:0];
BOOL xContains = [[plot plotRangeForCoordinate:CPTCoordinateX] containsDouble:point.x];
BOOL yContains = [[plot plotRangeForCoordinate:CPTCoordinateY] containsDouble:point.y];
if (xContains && yContains) {
return YES;
}
return NO;
}
#pragma mark - Plot Space Delegate Methods
- (BOOL)plotSpace:(CPTPlotSpace*)space shouldHandlePointingDeviceDownEvent:(id)event atPoint:(CGPoint)point
{
CGPoint pointInPlotArea = [graph convertPoint:point fromLayer:graph.plotAreaFrame];
if ([self npvCurveContainPoint:pointInPlotArea]) {
NSLog(@"Curve is selected!!!");
}
return NO;
}
答案 0 :(得分:0)
我不确定你要测试的是什么,但是你正在混合坐标系。传递给绘图空间委托方法的点位于绘图区域图层的视图坐标中。您将其转换为整个图层的坐标系,然后根据绘图空间数据坐标测试该点。
绘图空间定义了屏幕上数据和绘图区域之间的映射。 location
的{{1}}对应于绘图区域的左手边缘,其终点(xRange
+ location
)对应于右手边缘。类似地,length
的{{1}}对应于绘图区域的下边缘,其终点对应于上边缘。请注意,绘图范围可以具有负长度,这意味着终点的数据坐标可以小于起始位置。