iOS图表库似乎存在一个问题,即如果蜡烛图上的x值太大,则蜡烛将呈现为非常细长的形状,甚至在屏幕上几乎不可见。我正在根据以下时间在图表中添加时间间隔:
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd"
let minuteFormatter = DateFormatter()
minuteFormatter.locale = Locale(identifier: "en_US_POSIX")
minuteFormatter.dateFormat = "HH:mm"
for dictionary in response.value as! [[String:Any]] {
var timeInterval = TimeInterval(0)
if let minute = dictionary["minute"] as? String {
timeInterval = minuteFormatter.date(from: minute)!.timeIntervalSince1970
} else {
// convert Date to TimeInterval (typealias for Double)
timeInterval = dateFormatter.date(from: dictionary["date"] as! String)!.timeIntervalSince1970
}
// convert to Integer
let myInt = Int(timeInterval )
let entry = CandleChartDataEntry(x: Double(myInt), shadowH: dictionary["high"] as? Double ?? 0.00, shadowL: dictionary["low"] as? Double ?? 0.00, open: dictionary["open"] as? Double ?? 0.00, close: dictionary["close"] as? Double ?? 0.00, icon: nil)
vals.append(entry)
i += 1
}
在一个实例中,时间间隔是一个时间(hh:MM),在另一个实例中,它可以是一个日期(YYYY-MM-DD)。然后,我在这里相应地格式化它们:
class ChartValueFormatter: NSObject, IAxisValueFormatter {
var timeFrame : Int = 0
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
if timeFrame == 0 {
let minuteFormatter = DateFormatter()
minuteFormatter.locale = Locale(identifier: "en_US_POSIX")
minuteFormatter.dateFormat = "HH:mm"
let date = Date(timeIntervalSince1970: value)
return minuteFormatter.string(from: date)
} else if timeFrame != 0 {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = Date(timeIntervalSince1970: value)
return dateFormatter.string(from: date)
} else {
return ""
}
}
}
如何可靠,轻松地独特地截断x值,以便固定图表,但仍将其转换回适当的标签(并在标签上显示正确的时间/日期)?
谢谢。