Диаграммы iOS 3.1.1 - значения даты по оси X не точны, а данные построены неправильно - PullRequest
0 голосов
/ 29 мая 2018

Итак, я работаю со сторонней платформой под названием «Графики» для обработки отображения данных о весе в моем приложении.Но это выглядит странно, вот фотография того, как это выглядит, а затем мой код после него.

my weight chart

Некоторые значения верны, но только 2 измои 4 значения веса отображаются, более того, указанная ниже дата увеличивается с шагом в 6 месяцев, я не знаю почему, потому что я никогда не указывал это в своем коде, они не совпадают с моими значениями веса.Вот мои весовые объекты, которые я хочу отобразить.

"progressWeights": [
        {
            "weight": "200",
            "_id": "5af4c835b83893a9754b82ec",
            "createdOn": "2010-05-10T00:00:00.000Z"
        },
        {
            "weight": "145",
            "_id": "5afe6614cbd4ff00323461ed",
            "createdOn": "2018-05-17T07:00:00.000Z"
        },
        {
            "weight": "153",
            "_id": "5b0cbc8db62b190844cce1e9",
            "createdOn": "2010-05-28T00:00:00.000Z"
        },
        {
            "weight": "185",
            "_id": "5b0cbcadb62b190844cce1ea",
            "createdOn": "2018-05-25T00:00:00.000Z"
        }
]

Теперь вот часть моего кода весовой диаграммы:

// Chart Data
var weightData = [String]() 
var weightUploadDates = [String]()

func lineChartSetup() {

    // convertToDate and millisecondsSince1970 are helper methods, output is time interval
    let uploadDates = weightUploadDates.map({ convertToDate(str: $0).millisecondsSince1970 })

    // Line chart population
    setLineChart(dataPoints: weightData, values: uploadDates) 
}

func setLineChart(dataPoints: [String], values: [Int]) {

    /*
     Here are what params are holding currently
     dataPoints:
      ▿ 4 elements
       - "200"
       - "145"
       - "153"
       - "185"

     values:
     ▿ 4 elements
       - 1273449600000
       - 1526540400000
       - 1275004800000
       - 1527206400000
    */

    var idx = 0
    // data point setup and color config
    for i in dataPoints {
        let dataPoint = ChartDataEntry(x: Double(values[idx]), y: Double(i)!) 
        dataEntry.append(dataPoint)
        idx += 1
    }

    // Setting up the data set for chart
    let chartDataSet = LineChartDataSet(values: dataEntry, label: "Weight")
    let chartData = LineChartData()
    chartData.addDataSet(chartDataSet)

    // Axes Setup
    let formatter: ChartFormatter = ChartFormatter()
    let str = values.map({ String($0) })
    formatter.setValues(values: str)
    let xaxis: XAxis = XAxis()
    xaxis.valueFormatter = formatter
    lineChartView.xAxis.labelPosition = .bottom
    lineChartView.xAxis.drawGridLinesEnabled = false
    lineChartView.xAxis.valueFormatter = xaxis.valueFormatter // I think this might be the problem?

    lineChartView.data = chartData
}

Я считаю, что источником проблемы является значение оси xformatter, как вы можете видеть на рисунке выше, даты не совпадают ни с одним из объектов веса, и они не соответствуют должным образом моим данным веса.Вот мой код форматирования значения:

public class ChartFormatter: NSObject, IAxisValueFormatter {

    var weightData = [String]()

    // This sets the x axis? - Dates go up by 6 months for some reason?...
    public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
        //print("String for value desc \(value)")
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd"
        let date = dateFormatter.string(from: Date(timeIntervalSince1970: value))
        return date
    }

    public func setValues(values: [String]) {
        self.weightData = values
    }
}

Когда моя диаграмма отображается, оператор print в методе stringForValue вызывается почти сто раз, вот некоторые из выводимых данных:

String for vlaue desc 1280000000000.0
The date value: 08/02
String for vlaue desc 1320000000000.0
The date value: 02/18
String for vlaue desc 1360000000000.0
The date value: 09/07
String for vlaue desc 1400000000000.0
The date value: 03/27
String for vlaue desc 1440000000000.0
The date value: 10/13
String for vlaue desc 1480000000000.0

Кажется, что мое первое значение даты (1273449600000) округляется до 1280000000000.0, а затем 40000000000 добавляется для каждой итерации?Я не знаю, откуда это исходит, и это не должно делать это.

Так что это моя проблема, есть идеи, как заставить ось х хранить только те 4 объекта даты, которые у меня есть, и сделать так, чтобы она соответствовала своему значению веса?Любая помощь приветствуется.Дайте мне знать, если вам нужна дополнительная информация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...