Я создал линейную диаграмму с модулем iOS Charts.
Во-первых, у меня есть массив пользовательских объектов TestBalance, которые содержат dateString (которая преобразуется в Date) и сумму ( Двухместный). В настоящее время я создал жестко запрограммированный массив, подобный этому.
let balanceTestArray : [TestBalance] = [TestBalance(dateString: "01/01/2019", amount: 1920.24), //More elements... , TestBalance(dateString: "28/01/2019", amount: 844.24)]
I, а затем go на создание массива ChartDataEntry для данных графика.
let now = Date().timeIntervalSince1970
let dayInterval: TimeInterval = 3600 * 24
guard let firstDate = balanceTestArray.first else {return}
guard let lastDate = balanceTestArray.last else {return}
guard let firstDateDateValue = firstDate.date else {
print("No Date")
return
}
guard let lastDateDateValue = lastDate.date else {
print("No Date")
return
}
let from = firstDateDateValue.timeIntervalSince1970
let to = lastDateDateValue.timeIntervalSince1970 + dayInterval
var counter = 0
let values = stride(from: from, to: to, by: dayInterval).map { (x) -> ChartDataEntry in
let y = balanceTestArray[counter].amount
counter += 1
return ChartDataEntry(x: x, y: Double(y))
}
Выше код, кажется, работает отлично, строит все точки и метки осей примерно так ...
Снимок экрана графика из iOS simulator
Я настроил свой xAxis следующим образом:
let xAxis = lineChartView.xAxis
xAxis.labelPosition = .bottom
xAxis.labelFont = UIFont(name: "Montserrat-Regular", size: 10)!
xAxis.labelTextColor = UIColor(hex: "#A2A2A2FF")!
xAxis.drawAxisLineEnabled = false
xAxis.drawGridLinesEnabled = false
xAxis.granularity = 1.0
xAxis.centerAxisLabelsEnabled = false
xAxis.avoidFirstLastClippingEnabled = true
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE dd"
let xValuesNumberFormatter = ChartXAxisFormatter()
xValuesNumberFormatter.dateFormatter = dateFormatter
xAxis.valueFormatter = xValuesNumberFormatter
Именно здесь начинают проявляться мои 2 основные проблемы.
- Первая проблема - метки оси не совпадают с данными, мне кажется, что интервал не совпадает? Вот изображение, увеличенное до начала данных. Как я могу исправить интервал, чтобы максимизировать данные? Я не хочу, чтобы для каждого значения была более 1-дневная метка, тогда как при увеличении есть текущие 2. Любые решения?
Проблема выравнивания
Второй вопрос, в правой части графика последняя дата, в данном случае 28 января не отображается как метка, а данные отображаются? Как заставить ярлык появляться?