Как установить пользовательскую метку оси x 0 в диаграммах ios - PullRequest
0 голосов
/ 02 апреля 2020

Я использую Диаграммы Даниэля Джинди

Как я могу установить метку String 0 на оси x? Я хочу, чтобы он показывал «Сейчас» вместо типа «Дата». Как работает getFormattedLabel(index: Int)?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Потребовалось некоторое время, чтобы понять, но я нашел отличный учебник по Medium Спенсера Мандрусяка

Мне нужно было сделать первый ярлык типа String, а все остальные должны все еще быть типами даты. Что я сделал:

  • Создан класс форматирования оси X.
  • Добавлено перечисление только с одной меткой
  • При возврате значения я возвращаю время, если не осталось пользовательских меток.

Это решение хорошо работает для меня!

class ChartXAxisFormatter: NSObject, IAxisValueFormatter {

    enum CustomLabel: Int {
        case firstLabel

        var label: String {
            switch self {
            case .firstLabel: return "Now"                
                }
            }
        }

 func stringForValue(_ value: Double, axis: AxisBase?) -> String {
            let dateFormatterPrint = DateFormatter()
            dateFormatterPrint.dateFormat = "hh:mm"

            let date = Date(timeIntervalSince1970: value)
            let time = dateFormatterPrint.string(from: date)

            let intVal = Int(value)
            let customLabel = CustomLabel(rawValue: intVal)
            return customLabel?.label ?? "\(time)"


    }
}

0 голосов
/ 02 апреля 2020

Вы можете установить xAxis.valueFormatter в свой собственный класс и затем возвращать его сейчас, когда значение x равно 0. Например:

class ChartValueFormatter: NSObject, IAxisValueFormatter {

    func stringForValue(_ value: Double, axis: AxisBase?) -> String {

        if value == 0 {

            return "Now"
        }

        let dateFormatter = DateFormatter()
        dateFormatter.setLocalizedDateFormatFromTemplate("dd MMM")
        dateFormatter.locale = .current

        let date = Date(timeIntervalSince1970: value)

        return dateFormatter.string(from: date)
    }
}

Чтобы это работало, вам нужно отсортировать значения на основе даты а затем установите затем значение timestamp в ноль.

...