Muitos perguntaram sobre como migrar para o Charts 3.0. Portanto, tudo estará nas notas de lançamento assim que houver um lançamento, mas vou escrevê-los aqui por agora:
Esta é uma versão principal, com algumas alterações importantes. Portanto, preste atenção.
Atualizações:
x-index
es estão mortos. Introdução: valores x. Cada entrada agora tem um x
e um y
.y
, não herdando mais de NSNumberFormatter, para ter informações de dataSet e viewport para tomar melhores decisões de formatação.objc(...)
e a alteração de uma atualização de versão principal)FillFormatter
agora tem uma representação de bloco usando FillFormatter.withblock(...)
saveToCameraRoll()
. Como o Xcode 8.0 causa problemas de "privacidade" com o Apple Review, você deve adicionar a chave de privacidade do álbum de fotos ao seu Info.plist
para isso.Quebrando mudanças / como migrar:
PieChartDataEntry
/ RadarChartDataEntry
startAtZeroEnabled
antigas, elas foram descontinuadas há muito tempo. Substitua-os por axisMinimum
.chart.valueFormatter = formatter
por chart.valueFormatter = ChartDefaultValueFormatter(formatter: formatter)
ou chart.valueFormatter = [[ChartDefaultValueFormatter alloc] initWithFormatter:formatter];
axis.valueFormatter = formatter
por axis.valueFormatter = ChartDefaultAxisValueFormatter(formatter: formatter)
ou axis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:formatter];
ChartViewDelegate
é implementado, atualize a interface chartValueSelected
drawSliceTextEnabled
por drawEntryLabelsEnabled
IShapeRenderer
e coloque seu código de renderização láMarkerView
/ MarkerImage
ou implementar IMarker
. Existem mais opções do que antes ...barSpace
antes, passe a usar barWidth
saveToCameraRoll()
, substitua por UIImageWriteToSavedPhotosAlbum(chart.getChartImage(trasparent: false), nil, nil, nil)
@objc(name)
. Se o seu compilador gritar que uma classe não existe, tente remover o gráfico de seu nome. Isso raramente deve acontecer, pois escolhemos apenas as classes que raramente são instanciadas pelo usuário.@danielgindi Suporte para cocoapods?
@danielgindi ainda posso copiar essas classes para o meu projeto como antes?
Ainda não em Cocoapods. Como eu disse, ainda não foi lançado.
Sim, você pode copiar as aulas como antes. No entanto, é mais confortável arrastar xcodeproj
para o projeto. Não é recomendado arrastar as próprias fontes, pois isso tornará a atualização do Chrats em seu projeto mais difícil.
@danielgindi
Obrigado pelo excelente trabalho!
Agora que estou com um problema, noto que os índices x estão mortos:
- x-indexes are dead. Intoducing: x-values. Each entry now has an x and a y.
- In general, all functions that accepted x-indices before, now accept an x-value,
so you might have to adjust the names a little bit.
Então, como posso mostrar a string (por exemplo, uma string de data) no xAxis em vez de um número flutuante (como 1.0, 2.0 ...)?
Obtenha o NSTimeInterval de uma data, NSTimeInterval é na verdade um duplo.
Mal posso esperar pelo lançamento! 👍
@danielgindi Desde que atualizei para o XCode 8.0, meu projeto não constrói porque tenho Charts instalado via cocoapods e ainda está usando uma versão legada do Swift. Em quanto tempo podemos esperar o lançamento do Charts 3.0 ou o que posso fazer para resolver esses erros enquanto isso? Obrigado por todos os seus esforços.
Aponte seu podfile para o branch master em vez de uma versão por enquanto
@ petester42 Obrigado pela dica, no entanto, não consigo fazer funcionar. Alterei meu podfile para pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master'
e executei a instalação do pod. A saída ficou assim:
Mas ainda recebi o erro "Usar versão de linguagem Swift legada" quando tentei executar o projeto:
Mais alguma dica útil?
@Carielle Para instalar o Charts 3.0.0 antes de ser compatível com o CocoaPods, remova os Charts antigos do arquivo pod e do projeto e, em seguida, baixe o arquivo Charts.xcodeproj desta página do github.
Em seguida, abra seu projeto de destino no XCode e arraste o arquivo Charts.xcodeproj do diretório do qual ele foi baixado para o seu projeto na interface do XCode.
Depois disso, adicione Charts.framework na seção "Embedded Binary" das configurações gerais do seu projeto.
@ TUDO verifique # 1291 para problemas do Swift 2.3 e 3.0
Aponte um erro na descrição de migração:
Se você estiver usando formatadores:
Estou recebendo o mesmo que @Carielle , tentarei o que @HenryAlkire disse
Qual branch você está usando?
@rrecio Não pode ser .. Eu
Eu estava usando a configuração normal do cocoapod: pod 'Charts'
Para corrigi-lo, removi a entrada do Podfile e vinculei Charts.framework manualmente conforme explicou @Henry
Enviado do meu iPhone
Em 20 de set de 2016, às 21:59, Xuan [email protected] escreveu:
@rrecio Não pode ser .. Eu
-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.
Alguma ideia de quando estará disponível no Cocoapods?
Como faço para atualizar o Charts para funcionar com o Xcode 8.0 e o Swift 3.0 usando o Carthage?
Quando eu executo a "atualização do carthage", ele ainda está puxando o Charts 2.3.0. Meu Cartfile está configurado para usar a versão mais recente.
github "danielgindi / Charts"
atualização de $ carthage
** Gráficos de clonagem* * Resultado da clonagem
** Clonagem de reino-cacau* * Verificando Gráficos em "v2.3.0"
@danielgindi
Seria ótimo se você incluísse esses recursos ... Como esses recursos devem estar na maior parte da biblioteca ... especialmente em gráficos de alta:
1) gráfico de linha com diferentes formatos de marcadores
https://github.com/danielgindi/Charts/issues/1405
2) Capaz de adicionar visualização personalizada em locais específicos no eixo x. A personalização das cores de fundo está faltando na maioria das visualizações.
https://github.com/danielgindi/Charts/issues/1416
Cartago usa a versão de lançamento mais recente. Se você quiser 3.0 (que ainda não foi lançado), use github "danielgindi/Charts" "master"
Baixe o projeto completo usando o branch master e arraste e solte Charts.xcodeproj e então vá para a aba General e adicione Charts.framework em Embedded Binaries depois de Clean and build para que você possa ver que todos os erros acabaram, apenas experimente. caso necessite de alguma ajuda comente eu te ajudarei. @ petester42 @ Huang-Libo
@HenryAlkire Eu fiz o que você sugeriu e removi os gráficos do meu podfile e arrastei e soltei-os manualmente no meu projeto e adicionei-os como um binário incorporado. No entanto, quando tento construir o projeto, continuo recebendo este erro:
dyld: Library not loaded: @rpath/libswiftCore.dylib
Reason: image not found
Parece ser referenciado em Charts.framework / Charts. Alguma ideia de como resolver esse problema?
Resolvi meu próprio problema - meu projeto é um projeto Objective-C usando a biblioteca Swift Charts, então tive que ir para Build Settings> Build Options> "Always Embed Swift Standard Libraries" e definir como YES. Isso substitui o sinalizador "Embedded Content Contains Swift" obsoleto.
@Carielle Também pode ver este problema https://github.com/danielgindi/Charts/issues/1487
@danielgindi É possível estimar o lançamento de Cocoa Pods para o Charts 3? 1-2 semanas ou mais como um mês?
Obrigado por seus esforços 👍
Você pode usar o gráfico 3 com cocoapods agora, apontando para o ramo mestre. Não podemos garantir que será estável, pois não é definitivo.
@ petester42 Estou fornecendo um pod de estrutura que tem uma dependência na especificação do pod para gráficos. Infelizmente, você não pode apontar para outro repositório ou branches nas especificações do pod, como nos arquivos do pod. Eu poderia sobrescrever meu Podfile para meu projeto de exemplo, mas isso não é distribuível. Portanto, por enquanto, estou bloqueado para o Swift 2.2. Mas obrigado pela dica :)
Atualização para outras pessoas usando o gráfico 3 com Cocoapods
Estou trabalhando na migração de um projeto de Swift 2.2 e Xcode 7 para Swift 3.0 e Xcode 8.0. Seguindo a abordagem de @Carielle - e como @ petester42 menciona acima - os gráficos 3 podem ser instalados com cocoapods.
Modificando o podfile para ter:
pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master'
levou ao seguinte para mim (1 de outubro de 2016)
No entanto, ainda existem alguns problemas de tempo de construção nos quais estou trabalhando, como era de se esperar até a versão final ser lançada.
Por exemplo, plotView.xAxis.setLabelsToSkip(10)
causa problemas, pois o método setLabelsToSkip agora não é reconhecido. Posso presumir que isso é temporário enquanto a versão final está sendo trabalhada ou há algum outro método que devo usar?
Obrigado @danielgindi e outros por seu excelente trabalho! Eu ficaria ansioso para ajudar a contribuir com a documentação de migração conforme aprendo, adaptando meu próprio projeto.
Antes de atualizar o gráfico do iOS para a versão 3.0, posso
let radarChartData = RadarChartData (xVals: dataPoints, dataSet: radarChartDataSet)
no entanto, após a atualização, não é possível definir xVals em RadarChartData, apenas
let radarChartData = RadarChartData (dataSet: radarChartDataSet)
Como posso definir xVals na versão mais recente. Eu tentei
dataEntry = RadarChartDataEntry (valor: Double (cleaningValue), data: "setTitle" as AnyObject?)
mas não funciona, já tinha pesquisado muitos documentos, mas não consigo encontrar como fazer isso, poderia me dar um exemplo para isso, obrigado conselho.
@AnChiChang leia as notas acima com
obrigado, entenda pelo ticket 1496
como posso formatar os valores x de matriz dupla para matriz de string na v3.0?
@bingozb por favor, olhe as demos
var a: Double = 1,5
var b: String = String (formato: "% f", a)
print ("b: (b)") // b: 1.500000
@danielgindi Eu uso o gráfico de linha 1, e eu tinha visto a demonstração e não encontrei nada sobre ela.
NSMutableArray * values = [[NSMutableArray alloc] init];
[valores addObject: [[ChartDataEntry alloc] initWithX: i y: val]];
LineChartDataSet * set1 = [[LineChartDataSet alloc] initW ithValues: values label: @ "xxx"];
a demonstração usa apenas valores de x duplos. ChartDataEntry não tem método init que eu possa enviar parâmetro de string.
Bem, eu vi os problemas e descobri que um dizia que podemos enviar integerValues da data, formatá-lo de volta e exibir no rótulo x. Mas não consigo encontrar algum método sobre isso. Não tenho certeza se pode funcionar dessa forma, na verdade.
ajude-me, por favor. Preciso mostrar a data para o eixo x.
Ola @bingozb
Espero que seus valores X sejam armazenados em uma matriz, então, por favor, faça este tipo de,
NSMutableArray * xVals;
Espero que você esteja entendendo.
@ rs10693 Sim, acho este método de protocolo. Parece que tenho que implementá-lo. Mas acho que nenhum delegado estava em conformidade com o protocolo IChartAxisValueFormatter. Quem deve cumprir este protocolo e onde implementar este método. Eu deixo meu controlador fazer isso, mas não funciona.
@bingozb Use ChartViewDelegate e IChartAxisValueFormatter e espero que você @import Charts;
@ rs10693 Oh, entendo! o delegado é valueFormatter ...
@bingozb o que você pode dizer que eu não entendo. por favor me elabore.
@danielgindi ainda não consigo instalar o Charts 3.0.0
O seguinte erro ocorre ao executar pod install
Analisando dependências
[!] Incapaz de satisfazer os seguintes requisitos:
Charts (~> 3.0.0)
exigido por Podfile
Nenhuma de suas fontes de especificações contém uma especificação que satisfaça a dependência: Charts (~> 3.0.0)
.
Você tem:
pod repo update
.Observação: a partir do CocoaPods 1.0, pod repo update
não acontece em pod install
por padrão.
Por favor, ajude, isso significa que Charts 3.0.0 ainda não foi lançado para instalar usando
ou estou perdendo alguma etapa.
3.0 ainda não está em cocoapods porque não é final. Você pode apontar para o repositório git e master para obter o 3.0 agora
Já lançamos o 3.0.0 !
Isso é ótimo saber.
Mas estou um pouco preocupado se precisamos atualizar nosso pod de cacau ou seu repositório para a instalação do 3.0.0 recém-lançado
woot 🎉
@danielgindi, você precisa que eu empurre o pod ou já está coberto?
Tentei, agora depois de muito tempo, disse que o podspec não valida ...
Sim, leva um tempo. Eu posso fazer isso. Você precisa do cocoapods 1.1 para trabalhar com o Xcode 8 / swift 3
@ petester42 @danielgindi
eu tenho
pod --version
= 1.1.0
mas ainda assim o comando pod install
instala uma versão mais antiga.
Analisando dependências
Baixando dependências
Installing Charts (2.3.0)
Por favor guie
Está funcionando agora, depois de atualizar o repositório mestre do pod, obrigado pela ajuda
Obtendo esse erro no Swift 3.0 , ao implementar o gráfico de barras usando esta biblioteca.
Depois de resolver o erro acima, ele dá o próximo erro conforme mostrado abaixo.
Como faço para resolver esse erro no Swift 3.0?
let chartDataSet = BarChartDataSet (valores: dataEntries, label: nil)
let chartData = BarChartData (dataSet: chartDataSet)
sobre xVals, você deve implementar stringForValue.
Obrigado. como devo implementar stringForValue para xVals.
Forneça três exemplos rápidos
Olá,
Acabei de migrar do 2 para o 3 (estou usando o 3.0.2) e estou tendo 2 problemas:
Obrigado pela contribuição.
na classe BarChartRenderer
em função de modificação aberta drawValues (contexto: CGContext)
adicionar linha 408
`` `
if! dataSet.isStacked
{
para j em 0 .. <Int (ceil (Double (dataSet.entryCount) * animator.phaseX))
{
guarda deixe e = dataSet.entryForIndex (j) como? BarChartDataEntry else {continue}
let rect = buffer.rects[j]
let x = rect.origin.x + rect.size.width / 2.0
if !viewPortHandler.isInBoundsRight(x)
{
break
}
if !viewPortHandler.isInBoundsY(rect.origin.y)
|| !viewPortHandler.isInBoundsLeft(x)
{
continue
}
let val = e.y
if val == 0 <-----------this line
{ <-----------this line
continue <-----------this line
} <-----------this line
`` `
adicione uma variável se quiser
var drawValuesZeroEnabled: Bool {get set}
Obrigado Thierry.
Então está consertado :)
Ainda tenho o problema desse espaçamento estranho.
Acabei de criar um gráfico de barras padrão com valor 0 e ainda tenho o problema - tentei chegar o mais perto possível de uma barra simples para ver qual era o problema.
Parece a demonstração, mas assim que coloco um valor entre 0 e 0,9999 recebo esse preenchimento.
Aqui está o código de amostra:
<strong i="11">@IBOutlet</strong> var barChartView: BarChartView!
func viewDidLoad() {
super.viewDidLoad()
self.styleChart()
self.configureChart()
}
internal func styleChart() {
self.barChartView.xAxis.labelPosition = .bottom
self.barChartView.xAxis.labelCount = 2
}
internal func configureChart() {
var xValues = [String]()
var entries: [ChartDataEntry] = Array()
xValues.append("TEST 5")
xValues.append("TEST 0")
entries.append(BarChartDataEntry(x: Double(0), y: Double(5) ))
entries.append(BarChartDataEntry(x: Double(1), y: Double(0) ))
let dataSet = BarChartDataSet(values: entries, label: "")
dataSet.drawIconsEnabled = false
dataSet.drawValuesEnabled = true
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
dataSet.valueFormatter = DefaultValueFormatter(formatter: formatter)
let barChartData = BarChartData(dataSet: dataSet)
barChartData.barWidth = 0.2
self.barChartView.data = barChartData
}
Bem direto.
É um bug?
Problema com 0:
Não 0:
Obrigado pela ajuda ;)
Onde posso encontrar documentos sobre a API antiga para gráficos? Nunca usei esse framework (além de atualizá-lo algumas vezes) e tenho que atualizar de 2.3 para 3.0.4, então documentos antigos seriam legais para descobrir códigos antigos, por exemplo:
[entrySet addObject:[[ChartDataEntry alloc] initWithValue: item.avgSpeed xIndex:index]];
Agora, não há init chamado initWithValue: xIndex
, mas sim init chamado:
initWithX: y:
, então estou tentando descobrir quais eram os parâmetros antigos e como usar o novo init para obter o mesmo resultado ...
Além disso, a matriz valuesObjc está faltando agora:
//myLineChartView is LineChartView
NSDate* date = (NSDate*)[myLineChartView.xAxis.valuesObjc objectAtIndex:index];
Como eu disse, nunca usei esse framework, então alguma ajuda seria apreciada, ou pelo menos um link para documentos antigos da API seria útil ...
Não acho que esse recurso exista. Você pode verificar o branch legado / 2.3 para verificar as demos e compará-las com outras versões atuais.
BarChartData.init (xVals: xVals, dataSets: dataSets) não pode funcionar. o que é substituí-lo?
Como posso rolar o valor x do gráfico de linha para o centro de maneira programática?
Comentários muito úteis
@Carielle Para instalar o Charts 3.0.0 antes de ser compatível com o CocoaPods, remova os Charts antigos do arquivo pod e do projeto e, em seguida, baixe o arquivo Charts.xcodeproj desta página do github.
Em seguida, abra seu projeto de destino no XCode e arraste o arquivo Charts.xcodeproj do diretório do qual ele foi baixado para o seu projeto na interface do XCode.
Depois disso, adicione Charts.framework na seção "Embedded Binary" das configurações gerais do seu projeto.