Показать время на оси х графика с помощью библиотеки диаграмм Даниеля Джинди - PullRequest
0 голосов
/ 12 марта 2020

Я использую библиотеку диаграмм Даниэля Джинди: https://github.com/danielgindi/Charts

Для моего проекта мне нужно заменить ось X временем, которое показывает только часы и минуты (ЧЧ: мм ).

Я создал класс с расширением на основе этого ответа: ios Графики 3.0 - Совместите x меток (дат) с графиками

import UIKit
import Charts

class ChartXAxisFormatter: NSObject {
      fileprivate var dateFormatter: DateFormatter?
      fileprivate var referenceTimeInterval: TimeInterval?

      convenience init(referenceTimeInterval: TimeInterval, dateFormatter: DateFormatter) {
          self.init()
          self.referenceTimeInterval = referenceTimeInterval
          self.dateFormatter = dateFormatter
      }
}

extension ChartXAxisFormatter: IAxisValueFormatter {

     func stringForValue(_ value: Double, axis: AxisBase?) -> String {
           guard let dateFormatter = dateFormatter,
           let referenceTimeInterval = referenceTimeInterval
           else {
               return ""
           }

           let date = Date(timeIntervalSince1970: value * 3600 * 24 + referenceTimeInterval)
           return dateFormatter.string(from: date)
       }

}

I иметь одно представление Графиков, которое показывает график давления или температуры, когда я нажимаю на конкретную кнопку (есть отдельные кнопки для отображения температуры / давления).

Итак, мой вопрос в том, что я не могу понять, как я могу на самом деле использовать этот класс для преобразования моей оси x, чтобы показать время?

Есть идеи? Спасибо!

1 Ответ

0 голосов
/ 25 марта 2020

Во-первых, упомянутый выше класс нуждается в некотором обновлении:

import UIKit

class ChartXAxisFormatter: NSObject {
      fileprivate var dateFormatter: DateFormatter?
      fileprivate var referenceTimeInterval: TimeInterval?

      convenience init(referenceTimeInterval: TimeInterval, dateFormatter: DateFormatter) {
          self.init()
          self.referenceTimeInterval = referenceTimeInterval
          self.dateFormatter = dateFormatter
      }
}

extension ChartXAxisFormatter: IAxisValueFormatter {

     func stringForValue(_ value: Double, axis: AxisBase?) -> String {

        let dateFormatterPrint = DateFormatter()
        dateFormatterPrint.dateFormat = "HH:mm"

        let date = Date(timeIntervalSince1970: value)
            return dateFormatterPrint.string(from: date)
       }

}

Во-вторых, я забыл использовать это для фактического подключения средства форматирования значений xAxis к новому классу:

chartView.chart.xAxis.valueFormatter = ChartXAxisFormatter() 
...