Em primeiro lugar, essa biblioteca IOS é incrível! Obrigado.
Tenho que exibir os valores Y em um BarChart no formato de hora (mn: ss)
Eu vi na documentação do IOS que uma classe chamada "ChartDefaultXAxisValueFormatter", mas não consigo encontrar uma maneira de usá-la.
Alguém conseguiu tal coisa?
Alexis
Você já viu o exemplo de controlador de exibição de gráfico de barras empilhadas? Imagino que seja parecido onde vc passa um formatador?
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 1;
formatter.negativeSuffix = @" $";
formatter.positiveSuffix = @" $";
BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets];
[data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]];
[data setValueFormatter:formatter];
_chartView.data = data;
@dxclancy apontou isso. Esteja ciente de que ele é um formatador de número agora, então você pode precisar escrever algum código para ligar o formatador de número e data.
Olá,
Obrigado sua resposta. Infelizmente, leftAxis.valueformatter só aceita NSNumberFormatter.
Estou tentando usar o ChartDefaultXAxisValueFormatter como nos arquivos swift, mas não consigo implementá-lo.
O que é necessário é exibir o eixo esquerdo (Y) como tempo ex = 1:02:58
Alexis
Oi, suponho que o que você deseja é passar um NSDateFormatter?
Eu vejo isso na definição:
public var valueFormatter: ChartXAxisValueFormatter?
Então você precisa que uma de suas classes implemente esse protocolo
<strong i="9">@interface</strong> MyChartViewController: < ChartXAxisValueFormatter>
ou
<strong i="13">@interface</strong> MyCustomFormatter: NSObject < ChartXAxisValueFormatter>
ou o equivalente rápido.
Mas parece que você deseja formatar yVals, o que significa que você só tem acesso a um NSNumberFormatter. Direito?
Na verdade, estamos discutindo um problema semelhante a este em # 742. No entanto, a posição de @danielgindi atualmente parece ser que isso está incorreto.
Então, acho que você tem 3 opções.
Observe que sou bastante novo nesta biblioteca maravilhosa, que tem muitas opções excelentes com as quais não estou familiarizado, então pode estar faltando algo óbvio.
suas sugestões são apreciadas. Precisamos pensar com cuidado se quisermos mover o formatador de eixo para formatadores. Pensando que todos os dados são naturalmente números, pensamos que o formatador de números é o formatador a ser usado. Caso queira exibir strings diferentes do valor, você pode personalizar o seu próprio. Mas a fonte do formatador é um número, com certeza.
Usei o método de substituição. Funcionou como um encanto!
Obrigado pessoal vocês são os melhores :)
NSNumberFormatter
é mais correto do que NSFormatter
simplesmente devido ao fato de que o valor que está sendo passado é _sempre_ um número. Você não ganha nada usando NSFormatter
especificamente. O fato de você querer uma saída que não seja um número não muda o fato de que a entrada é um número, e você deseja formatar esse número de uma maneira muito especial.
Iremos, no entanto, avançar com nossa própria interface, que passa mais informações junto com o valor (a abordagem ChartYAxisValueFormatter
).
Dito isso - este problema deve permanecer aberto até que implementemos o protocolo para um formatador de valor do eixo Y.
Implementado no Charts 3.0 (branch v3)
Eu consegui herdando IAxisValueFormatter
.
import Foundation
import Charts
class YAxisValueFormatter: NSObject, IAxisValueFormatter {
let numFormatter: NumberFormatter
override init() {
numFormatter = NumberFormatter()
numFormatter.minimumFractionDigits = 1
numFormatter.maximumFractionDigits = 1
// if number is less than 1 add 0 before decimal
numFormatter.minimumIntegerDigits = 1 // how many digits do want before decimal
numFormatter.paddingPosition = .beforePrefix
numFormatter.paddingCharacter = "0"
}
/// Called when a value from an axis is formatted before being drawn.
///
/// For performance reasons, avoid excessive calculations and memory allocations inside this method.
///
/// - returns: The customized label that is drawn on the axis.
/// - parameter value: the value that is currently being drawn
/// - parameter axis: the axis that the value belongs to
///
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return numFormatter.string(from: NSNumber(floatLiteral: value))!
}
}
crie YAxisValueFormatterclass e atribua o objeto ao gráfico leftAxis
// Number formatting of YAxis
chartView.leftAxis.valueFormatter = YAxisValueFormatter()
Quando herdo IAxisValueFormatter conforme declarado acima, recebo um erro: "Nenhum tipo ou protocolo denominado 'IChartAxisValueFormatter'" em meu arquivo ProjectName-Swift.h.
Comentários muito úteis
Eu consegui herdando
IAxisValueFormatter
.crie YAxisValueFormatterclass e atribua o objeto ao gráfico leftAxis