CorePlot-在散点图中摆动的注释

时间:2019-05-15 09:55:23

标签: ios swift graph annotations core-plot

在我的应用中,我有一个CorePlot,它托管三个散点图,我还进行了如下配置,

    let borderStyle       = CPTMutableLineStyle()
    borderStyle.lineColor = maxPlotColor

    let textLayer             = CPTTextLayer(text: "MAX")
    textLayer.fill            = CPTFill(color: .white())
    textLayer.cornerRadius    = 10.0
    textLayer.borderLineStyle = borderStyle

    maxLabelAnnotation              = CPTPlotSpaceAnnotation(plotSpace: maxLinePlot.plotSpace!, anchorPlotPoint: [5, NSNumber(value: kMaxLineValue)])
    maxLabelAnnotation.contentLayer = textLayer

    maxLinePlot.graph?.plotAreaFrame?.plotArea?.addAnnotation(maxLabelAnnotation)

当绘图数据更新时,注释将动态更新。代码段如下所示,

func newData(_ theTimer: Timer) {
    // MARK: Dynmic annotations
    maxLabelAnnotation.anchorPlotPoint  = [NSNumber(value: currentIndex - 18), NSNumber(value: kMaxLineValue)]
    riskLabelAnnotation.anchorPlotPoint = [NSNumber(value: currentIndex - 18), NSNumber(value: kRiskLineValue)] }

该问题显示在图中,其中随着图形的不断移动,注解又往回移动 graph with annotation swinging

我只想将注释粘贴在没有任何摆动的位置。任何帮助将非常感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

注解在滚动时会锁定到绘图空间,但是您会使用每个新数据点更新它们的锚点位置,从而使它们跳到下一个位置。使用图层批注而不是打印空间批注将它们锁定在适当的位置。如果y轴的比例发生变化,则需要重新计算y位置,但是随着图形在其下方滚动,标签将保留在原处。

在构建视图层次结构并布局所有内容之后执行此操作,以使视图计算正确。

maxLinePlot.layoutIfNeeded()

if let plotArea = maxLinePlot.graph?.plotAreaFrame?.plotArea {
    let plotSpace = maxLinePlot.plotSpace!
    let viewPoint = plotSpace.plotAreaViewPoint(forPlotPoint: [0.0, kMaxLineValue])

    let maxLabelAnnotation          = CPTLayerAnnotation(anchorLayer: plotArea)
    maxLabelAnnotation.contentLayer = textLayer
    maxLabelAnnotation.xConstraints = CPTConstraints(relativeOffset: 0.25)
    maxLabelAnnotation.yConstraints = CPTConstraints(lowerOffset: viewPoint.y)

    plotArea.addAnnotation(maxLabelAnnotation)
}