使用 Daniel Gindi 的图表库在图表的 x 轴上显示时间
Show time on x axis of the chart using Charts library by Daniel Gindi
我正在使用 Daniel Gindi 的图表库:https://github.com/danielgindi/Charts
对于我的项目,我需要将 x 轴替换为仅显示小时和分钟 (HH:mm) 的时间。
我根据这个答案创建了 class 扩展:
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)
}
}
我有一个图表视图,当我单击特定按钮时会显示压力或温度图表(有单独的按钮用于显示 temperature/pressure)。
所以,我的问题是我不知道如何实际使用这个 class 来转换我的 x 轴以显示时间?
有什么想法吗?谢谢!
首先,我上面提到的 class 需要一些更新:
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 值格式化程序实际连接到新的 class:
chartView.chart.xAxis.valueFormatter = ChartXAxisFormatter()
我正在使用 Daniel Gindi 的图表库:https://github.com/danielgindi/Charts
对于我的项目,我需要将 x 轴替换为仅显示小时和分钟 (HH:mm) 的时间。
我根据这个答案创建了 class 扩展:
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)
}
}
我有一个图表视图,当我单击特定按钮时会显示压力或温度图表(有单独的按钮用于显示 temperature/pressure)。
所以,我的问题是我不知道如何实际使用这个 class 来转换我的 x 轴以显示时间?
有什么想法吗?谢谢!
首先,我上面提到的 class 需要一些更新:
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 值格式化程序实际连接到新的 class:
chartView.chart.xAxis.valueFormatter = ChartXAxisFormatter()