Core-Plot Mac:在图形中鼠标悬停点时显示标签

时间:2012-02-27 12:54:00

标签: macos core-plot

我正在使用Core-Plot构建一个带有漂亮图形的mac osx应用程序。它是一个折线图(散点图),上面有多个点,用plotsymbol圆圈可视化。 我的目标是当用户将鼠标悬停在图表中的某个点上时,显示一个带有该点值的标签。

我已经将NSTracking添加到图表中,但是这有效但我在如何将绘图点/ plotsymbol转换为坐标时迷失了所以我知道它何时翻转点并显示标签。

有人有想法吗? 谢谢大家

2 个答案:

答案 0 :(得分:2)

您可以使用-indexOfVisiblePointClosestToPlotAreaPoint:方法找出哪个绘图符号最接近某个像素。此方法返回该点的数据源索引;您可以查看数据源提供的原始数据以获取实际值。 plotSymbolMarginForHitDetection属性控制点在注册为命中点之前与给定点的接近程度。

答案 1 :(得分:1)

我的解决方案将是这样的:

(我假设图表不显示任何标签。只有当鼠标悬停在图表上的一个点上时才会显示标签。)

在你处理鼠标逻辑的地方,你会这样做:

    NSDecimalNumber *tickLocation = [NSDecimalNumber numberWithDouble:"The relevant axis value of the object you have the mouse over"];
    NSString *labelText = @"The text of the label";
    NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:1];
    CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText: labelText textStyle:axisSet."Whatever axis you want -X/Y".labelTextStyle];
    label.tickLocation = [tickLocation decimalValue];
    label.offset = axisSet."Whatever axis you want -X/Y".labelOffset + axisSet."Whatever axis you want -X/Y".majorTickLength;
    label.rotation = M_PI/4;
    [customLabels addObject:label];
    axisSet."Whatever axis you want -X/Y".axisLabels =  [NSSet setWithArray:customLabels];

希望这有帮助。