CorePlot - колебания на графике рассеяния - PullRequest
0 голосов
/ 15 мая 2019

В моем приложении есть 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 голосов
/ 17 мая 2019

По мере прокрутки аннотации блокируются в пространстве графика, но вы обновляете их якорные позиции с каждой новой точкой данных, заставляя их переходить на следующую позицию. Используйте аннотации слоя вместо аннотаций пространства графика, чтобы зафиксировать их на месте. Вам нужно будет пересчитать 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)
}
...