我最近开始使用ios charts库,但在查找如何使用swift3更新的方式操纵x轴时遇到了问题。
我想要的是用时间值标记x轴,例如2:03:00,2:03:01,2:03:02等。在我找到的在线教程中,这似乎非常容易;其中许多使用年份月份作为x轴标签。
然而,在swift3更新中,charts现在使用x和y值初始化数值,我不确定如何在此版本的库中使用标签。有人知道如何在swift3中创建charts标签吗?
我最近开始使用ios charts库,但在查找如何使用swift3更新的方式操纵x轴时遇到了问题。
我想要的是用时间值标记x轴,例如2:03:00,2:03:01,2:03:02等。在我找到的在线教程中,这似乎非常容易;其中许多使用年份月份作为x轴标签。
然而,在swift3更新中,charts现在使用x和y值初始化数值,我不确定如何在此版本的库中使用标签。有人知道如何在swift3中创建charts标签吗?
在Swift 3+中X轴字符串标签的正确解决方案
let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values:months)
barChartView.xAxis.granularity = 1
import Foundation
import Charts
@objc(BarChartFormatter)
class ChartFormatter: NSObject, IAxisValueFormatter{
let months: [String] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return months[Int(value)]
}
}
将x轴设置如下:
let xAxis = XAxis()
let chartFormmater = ChartFormatter()
for i in index{
chartFormmater.stringForValue(Double(i), axis: xAxis)
}
xAxis.valueFormatter = chartFormmater
chartView.xAxis.valueFormatter = xAxis.valueFormatter
let entry = PieChartDataEntry(value: Double(entryValue), label: label)
- Jesus RodriguezSwift 5.5
我使用标准的DateFormatter()
取得了相当不错的结果,我将UNIX时间戳转换为日.月的格式。
final class XAxisNameFormatter: NSObject, AxisValueFormatter {
func stringForValue( _ value: Double, axis _: AxisBase?) -> String {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "dd.MM"
return formatter.string(from: Date(timeIntervalSince1970: value))
}
}
使用方法:
self.lineChartView.xAxis.valueFormatter = XAxisNameFormater()
self.lineChartView.xAxis.granularity = 1.0
我建议使用更灵活和美观的解决方案。您可以创建一个如下的格式化类:
final class MonthNameFormater: NSObject, IAxisValueFormatter {
func stringForValue( _ value: Double, axis _: AxisBase?) -> String {
return Calendar.current.shortMonthSymbols[Int(value)]
}
}
将此类型设置到您的 barChartView
中:
barChartView.xAxis.valueFormatter = MonthNameFormater()
barChartView.xAxis.granularity = 1.0
1月,2月,…,12月
另外,如果您想更改演示方式,则应该使用其他的monthSymbols、veryShortMonthSymbols、standaloneMonthSymbols
替换 shortMonthSymbols。 public class DateValueFormatter: NSObject, AxisValueFormatter {
private let dateFormatter = DateFormatter()
override init() {
super.init()
dateFormatter.dateFormat = "HH:mm:ss"
}
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return dateFormatter.string(from: Date(timeIntervalSince1970: value))
}
}
要设置您的值,只需使用以下代码。
self.yourChart.xAxis.valueFormatter = DateValueFormatter()
self.yourChart.xAxis.granularity = 1.0
我在创建类时遇到了问题,就像之前的答案所述。
'没有名为'IChartAxisValueFormatter'的类型或协议'
我除去了 NSObject
的继承,只留下了 IAxisValueFormatter
像这样:
final class XAxisNameFormater: IAxisValueFormatter {.....