Charts: ************* Migration vers Charts 3.0 ********************

Créé le 19 sept. 2016  ·  61Commentaires  ·  Source: danielgindi/Charts

Beaucoup ont demandé comment migrer vers Charts 3.0. Donc, tout sera dans les notes de version dès qu'il y aura une version, mais je vais les écrire ici pour l'instant :


Il s'agit d'une version majeure, avec quelques changements de rupture. Alors s'il vous plaît faites attention.

Mises à jour:

  • x-index es sont morts. Introduisant : les valeurs x. Chaque entrée a maintenant un x et un y .
  • Les graphiques circulaires/radar n'ont plus de concept d'index X
  • Fonctionnalités et expérience unifiées XAxis/YAxis.
  • Interfaces de formateur unifiées pour les axes.
  • Nouveau formateur pour les valeurs y , n'héritant plus de NSNumberFormatter, pour avoir des informations de dataSet et de fenêtre d'affichage pour prendre de meilleures décisions de formatage.
  • Refactorisation majeure du mécanisme Highlight.
  • Mécanisme de marqueur remanié
  • Mécanisme d'entrée de légende remanié
  • Chaque ensemble de données peut désormais définir sa propre forme/taille/etc.
  • Plus de démos
  • Certaines classes ont été renommées, en conservant le nom avec espace de noms uniquement dans ObjC (en utilisant la fonctionnalité Swift 2.2 objc(...) et le changement d'une mise à jour de version majeure)
  • FillFormatter maintenant une représentation de bloc utilisant FillFormatter.withblock(...)
  • Il en va de même pour tous les formateurs par défaut.
  • Plus de saveToCameraRoll() . Étant donné que Xcode 8.0 provoque des problèmes de "confidentialité" avec Apple Review, vous devez ajouter la clé de confidentialité des albums photo à votre Info.plist pour cela.
  • Déplacé vers Swift 3.0. Assurez-vous que votre projet est conforme à Swift 3.0.
  • De nombreuses corrections de bugs mineurs et améliorations

Changements marquants / comment migrer :

  • Tous les constructeurs de jeux de données ont changé - ils ne prennent plus un tableau d'indices x.
  • Tous les constructeurs d'entrée ont changé - ils prennent un X et un Y.
  • Les entrées de camembert et de graphique radar ont désormais leurs propres classes. Alors échangez les classes d'entrée avec PieChartDataEntry / RadarChartDataEntry
  • Si vous avez d'anciens appels startAtZeroEnabled , ils sont obsolètes depuis longtemps. Remplacez-les par axisMinimum .
  • Si vous utilisez des formateurs :

    • Remplacez tout chart.valueFormatter = formatter par chart.valueFormatter = ChartDefaultValueFormatter(formatter: formatter) ou chart.valueFormatter = [[ChartDefaultValueFormatter alloc] initWithFormatter:formatter];

    • Remplacez tout axis.valueFormatter = formatter par axis.valueFormatter = ChartDefaultAxisValueFormatter(formatter: formatter) ou axis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:formatter];

  • En général, toutes les fonctions qui acceptaient auparavant les indices x acceptent maintenant une valeur x, vous devrez donc peut-être ajuster un peu les noms.
  • Lorsque ChartViewDelegate est implémenté, mettez à jour l'interface chartValueSelected
  • Remplacez drawSliceTextEnabled par drawEntryLabelsEnabled
  • Si vous avez une forme de dispersion personnalisée, implémentez un IShapeRenderer et placez-y votre code de rendu
  • Si vous avez un marqueur personnalisé, envisagez de sous-classer MarkerView / MarkerImage ou d'implémenter IMarker . Il y a plus d'options qu'avant maintenant...
  • Si vous avez déjà utilisé barSpace , passez à l'utilisation de barWidth
  • Si vous avez utilisé saveToCameraRoll() , remplacez par UIImageWriteToSavedPhotosAlbum(chart.getChartImage(trasparent: false), nil, nil, nil)
  • Certaines classes ont été renommées pour une apparence plus nette. Ils ne contiennent plus le préfixe "Chart". C'est uniquement pour Swift, où il y a des espaces de noms. Dans ObjC, les noms sont restés les mêmes pour des raisons d'espacement des noms, en utilisant la fonctionnalité @objc(name) Swift 2.2 . Si votre compilateur crie qu'une classe n'existe pas, essayez de supprimer le graphique de son nom. Cela devrait rarement arriver, car nous n'avons choisi que les classes qui sont rarement instanciées par l'utilisateur.

Commentaire le plus utile

@Carielle Pour installer Charts 3.0.0 avant qu'il ne soit compatible avec CocoaPods, supprimez les anciens Charts de votre fichier pod et de votre projet, puis téléchargez le fichier Charts.xcodeproj depuis cette page github.

Ensuite, ouvrez votre projet cible dans XCode et faites glisser le fichier Charts.xcodeproj du répertoire dans lequel il a été téléchargé dans votre projet dans l'interface XCode.

Après cela, ajoutez Charts.framework dans la section "Embedded Binary" des paramètres généraux de votre projet.

Tous les 61 commentaires

@danielgindi Soutenir les cocopodes ?

@danielgindi puis-je toujours copier ces classes dans mon projet comme avant ?

Pas encore dans Cocoapods. Comme je l'ai dit, il n'est pas encore sorti.

Oui, vous pouvez copier les classes comme avant. Cependant, il est plus confortable de faire glisser le xcodeproj vers le projet. Il n'est pas recommandé de faire glisser les sources elles-mêmes, car cela rendra la mise à jour des Chrats dans votre projet plus difficile.

@danielgindi
Merci pour votre excellent travail !

Maintenant, j'ai un problème, je remarque que les x-index sont morts :

- 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.

Alors, comment puis-je afficher une chaîne (par exemple, une chaîne de date) sur xAxis plutôt qu'un nombre flottant (comme 1.0, 2.0 ...) ?

Réponse de Daniel :

Obtenez le NSTimeInterval d'une date, NSTimeInterval est en fait un double.

J'attends la sortie avec impatience ! ??

@danielgindi Depuis que j'ai mis à jour vers XCode 8.0, mon projet ne sera pas généré car j'ai installé Charts via Cocopods et il utilise toujours une version héritée de Swift. Dans combien de temps pouvons-nous nous attendre à une sortie de Charts 3.0, ou que puis-je faire pour résoudre ces erreurs en attendant ? Merci pour tous vos efforts.

Pointez votre podfile sur la branche master au lieu d'une version pour l'instant

@ petester42 Merci pour le conseil, cependant, je n'arrive pas à le faire fonctionner. J'ai changé mon podfile en pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master' et j'ai exécuté l'installation du pod. La sortie ressemblait à ceci :
snip20160919_3
Mais j'ai toujours eu l'erreur "Utiliser la version du langage Swift hérité" lorsque j'ai essayé d'exécuter le projet :
snip20160919_1

D'autres conseils utiles ?

@Carielle Pour installer Charts 3.0.0 avant qu'il ne soit compatible avec CocoaPods, supprimez les anciens Charts de votre fichier pod et de votre projet, puis téléchargez le fichier Charts.xcodeproj depuis cette page github.

Ensuite, ouvrez votre projet cible dans XCode et faites glisser le fichier Charts.xcodeproj du répertoire dans lequel il a été téléchargé dans votre projet dans l'interface XCode.

Après cela, ajoutez Charts.framework dans la section "Embedded Binary" des paramètres généraux de votre projet.

@ALL vérifie le #1291 pour les problèmes rapides 2.3 et 3.0

Signalez une erreur dans la description de la migration :
Si vous utilisez des formateurs :

  • Remplacez n'importe quel chart.valueFormatter = formateur par chart.valueFormatter = ChartDefaultValueFormatter(formateur: formateur) ou chart.valueFormatter = [[ChartDefaultValue Value Formatter alloc] initWith Formatter:formatter ];
  • Remplacez tout axis.valueFormatter = formateur par axis.valueFormatter = ChartDefaultAxisValueFormatter(formateur : formateur) ou axis.valueFormatter = [[ChartDefaultAxisValue Value Formatter alloc] initWith Formatter:formatter ];

Je reçois la même chose que @Carielle , j'essaierai ce que @HenryAlkire a dit

captura de tela 2016-09-20 as 09 38 38

Quelle branche utilisez-vous ?

@rrecio Cela ne peut pas être .. J'ai corrigé cela comme il y a quelques jours.

J'utilisais la configuration normale de Cocopod : pod 'Charts'

Pour y remédier, j'ai supprimé l'entrée Podfile et lié Charts.framework manuellement comme @Henry l'a expliqué

Enviado do meu iPhone

Em 20 de set de 2016, à 21:59, Xuan [email protected] escreveu:

@rrecio Cela ne peut pas être .. J'ai corrigé cela comme il y a quelques jours.

-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub ou coupez le fil de discussion.

Une idée de quand il sera disponible sur Cocoapods ?

Comment mettre à niveau les graphiques pour qu'ils fonctionnent avec Xcode 8.0 et Swift 3.0 à l'aide de Carthage ?

Lorsque je lance "carthage update", il tire toujours Charts 2.3.0. Mon fichier Cartfile est configuré pour utiliser la dernière version.

Fichier panier :

github "danielgindi/Graphiques"

Ligne de commande:

mise à jour de $carthage
** Graphiques de clonage* * Résultat du clonage
** Clonage royaume-cacao* * Consulter les graphiques sur "v2.3.0"

@danielgindi
Ce serait génial si vous incluiez ces fonctionnalités.

1) graphique linéaire avec différentes formes de marqueurs
https://github.com/danielgindi/Charts/issues/1405

2) Capable d'ajouter une vue personnalisée à des emplacements spécifiques sur l'axe X. La personnalisation des couleurs d'arrière-plan est manquante dans la plupart des vues.
https://github.com/danielgindi/Charts/issues/1416

Carthage utilise la dernière version. Si vous voulez 3.0 (qui n'est pas encore sorti) utilisez github "danielgindi/Charts" "master"

Téléchargez le projet complet à l'aide de la branche principale, puis glissez-déposez Charts.xcodeproj , puis accédez à l'onglet Général et ajoutez Charts.framework sous Embedded Binaries après Clean and build afin que vous puissiez voir que toutes les erreurs ont disparu, essayez-le. au cas où vous auriez besoin d'aide, commentez-le, je vous aiderai. @petester42 @Huang-Libo

@HenryAlkire J'ai fait ce que vous avez suggéré et j'ai supprimé les graphiques de mon fichier pod et je l'ai fait glisser et déposé manuellement dans mon projet, et je l'ai ajouté en tant que binaire intégré. Cependant, lorsque j'essaie de construire le projet, j'obtiens toujours cette erreur :
dyld: Library not loaded: @rpath/libswiftCore.dylib Reason: image not found
Il semble être référencé dans Charts.framework/Charts. Une idée de comment résoudre ce problème ?

J'ai résolu mon propre problème - mon projet est un projet Objective-C utilisant la bibliothèque Swift Charts, j'ai donc dû aller dans Paramètres de construction> Options de construction> "Toujours intégrer les bibliothèques Swift Standard" et le définir sur OUI. Cela remplace l'indicateur obsolète « Le contenu intégré contient Swift ».

@Carielle Peut également voir ce numéro https://github.com/danielgindi/Charts/issues/1487

@danielgindi Est-il possible d'estimer une sortie de Cocoa Pods pour les Charts 3 ? 1-2 semaines ou plus comme un mois ?

Merci pour vos efforts 👍

Vous pouvez utiliser les graphiques 3 avec les cocopodes dès maintenant en pointant sur la branche principale. Nous ne pouvons pas garantir que cela sera stable car ce n'est pas définitif.

@ petester42 Je fournis un pod de framework qui a une dépendance dans la spécification du pod aux graphiques. Malheureusement, vous ne pouvez pas pointer vers d'autres référentiels ou branches dans les spécifications de pod comme dans les fichiers de pod. Je pourrais écraser mon Podfile pour mon exemple de projet, mais ce n'est pas distribuable. Je suis donc bloqué pour l'instant sur Swift 2.2. Mais merci pour l'astuce :)

Mise à jour pour les autres utilisant les graphiques 3 avec Cocoapods

Je travaille sur la migration d'un projet de Swift 2.2 et Xcode 7 vers Swift 3.0 et Xcode 8.0. Suivant l'approche de @Carielle -- et comme @petester42 le mentionne ci-dessus -- les cartes 3 peuvent être installées avec des cocopodes.

Modification du podfile pour avoir :

pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master'

a conduit à ce qui suit pour moi (1er octobre 2016)

screen shot 2016-10-01 at 7 00 20 pm

Néanmoins, il y a encore quelques problèmes de temps de construction sur lesquels je travaille, comme il faut s'y attendre jusqu'à la sortie de la version finale.

Par exemple, plotView.xAxis.setLabelsToSkip(10) cause des problèmes car la méthode setLabelsToSkip n'est plus reconnue. Puis-je supposer que cela est temporaire pendant que la version finale est en cours de travail, ou existe-t-il une autre méthode que je devrais utiliser ?

Merci @danielgindi et les autres pour votre excellent travail ! Je serais désireux d'aider à contribuer à la documentation de migration au fur et à mesure que j'apprends en adaptant mon propre projet.

Avant de mettre à jour le graphique iOS vers la version 3.0, je peux
let radarChartData = RadarChartData(xVals : dataPoints, dataSet : radarChartDataSet)

Cependant, après la mise à niveau, vous ne pouvez pas définir xVals dans RadarChartData, uniquement
laissez radarChartData = RadarChartData(dataSet: radarChartDataSet)

Comment puis-je définir xVals dans la dernière version. j'ai dû essayer de
dataEntry = RadarChartDataEntry(valeur : Double(cleaningValue), données : "setTitle" comme AnyObject ?)
mais pas de travail, j'avais recherché de nombreux documents, mais je ne trouve pas comment faire cela, pourriez-vous me donner un exemple pour cela, merci de me conseiller.

@AnChiChang, veuillez lire attentivement les notes ci-dessus.

merci, comprenez grâce au ticket 1496

comment puis-je formater les valeurs x d'un tableau double à un tableau de chaînes en v3.0 ?

@bingozb s'il vous plaît regardez les démos

Google

var a:Double = 1.5
var b:Chaîne = Chaîne(format:"%f", a)
print("b: (b)") // b: 1.50000

@danielgindi J'utilise le graphique linéaire 1, et j'avais vu la démo et je n'avais rien trouvé à ce sujet.

NSMutableArray *values ​​= [[NSMutableArray alloc] init];
[values ​​addObject:[[ChartDataEntry alloc] initWithX:i y:val]] ;
LineChartDataSet *set1 = [[LineChartDataSet alloc] initW ithValues:values label:@"xxx"];

la démo utilise simplement des valeurs x doubles. ChartDataEntry n'a pas de méthode d'initialisation que je peux envoyer un paramètre de chaîne.
Eh bien, j'ai vu les problèmes et j'en ai trouvé un qui disait que nous pouvions envoyer les valeurs entières de la date, puis les reformater et les afficher sur l'étiquette x. Mais je ne trouve pas de méthode à ce sujet. Je ne suis pas sûr que cela puisse fonctionner de cette façon en fait.
aidez moi s'il vous plait. Je dois montrer la date à l'axe x.

Bonjour @bingozb

J'espère que vos valeurs X sont stockées dans un tableau, alors veuillez faire ce genre de,

NSMutableArray *xVals;

  • (NSString *)stringForValue:(double)value
    axe:(ChartAxisBase *)axe
    {
    si (xVals.count>0){
    return xVals[(int)value % xVals.count] ; // cette base de calcul sur laquelle vous souhaitez afficher.
    }
    retour nul ;
    }

J'espère que vous êtes compris.

@rs10693 Oui, je trouve cette méthode de protocole. Il semble que je dois l'appliquer. Mais je trouve qu'aucun délégué n'était conforme au protocole IChartAxisValueFormatter. Qui doit se conformer à ce protocole et où mettre en œuvre cette méthode. Je laisse ma manette faire ça mais ça ne marche pas.

@bingozb Utilisez ChartViewDelegate et IChartAxisValueFormatter et j'espère que vous @import Charts;

@rs10693 Oh, je vois ! le délégué est valueFormatter ...

@bingozb que pouvez-vous dire que je ne comprends pas. s'il vous plaît m'élaborer.

@danielgindi je ne

L'erreur suivante se produit lors de l'exécution de pod install
Analyser les dépendances
[!] Incapable de satisfaire les exigences suivantes :

  • Charts (~> 3.0.0) requis par Podfile

Aucune de vos sources de spécification ne contient une spécification satisfaisant la dépendance : Charts (~> 3.0.0) .

Vous avez soit :

  • référentiels sources obsolètes que vous pouvez mettre à jour avec pod repo update .
  • mal tapé le nom ou la version.
  • pas ajouté le référentiel source qui héberge le Podspec à votre Podfile.

Remarque : à partir de CocoaPods 1.0, pod repo update ne se produit pas sur pod install par défaut.

S'il vous plaît, aidez-vous, cela signifie-t-il que Charts 3.0.0 n'est pas encore publié à installer en utilisant

ou est-ce que je manque une étape.

3.0 n'est pas encore dans les cocopodes car ce n'est pas définitif. Vous pouvez pointer vers le dépôt git et le master pour obtenir la version 3.0 dès maintenant

Nous avons maintenant publié 3.0.0 !

C'est super à savoir.

Mais je suis un peu inquiet de devoir mettre à jour notre cabosse de cacao ou son référentiel pour installer la nouvelle version 3.0.0

woot

@danielgindi tu as besoin de moi pour pousser le pod ou tu as ça couvert?

Essayé, maintenant après un long moment, dit que le podspec ne valide pas...

Ouais ça prend du temps. Je peux le faire. Vous avez besoin de cocopods 1.1 pour travailler avec Xcode 8/swift 3

@petester42 @danielgindi
j'ai
pod --version = 1.1.0

mais la commande pod install installe toujours l'ancienne version.

Analyser les dépendances
Téléchargement des dépendances
Installing Charts (2.3.0)

S'il vous plaît guider

Cela fonctionne maintenant après la mise à jour du référentiel principal du pod merci pour l'aide

Obtenir une telle erreur dans Swift 3.0 , lors de l'implémentation de Bar Graph à l'aide de cette bibliothèque.

screen shot 2017-01-11 at 1 22 48 pm

Après avoir résolu l'erreur ci-dessus, il donne l'erreur suivante comme indiqué ci-dessous.

screen shot 2017-01-11 at 12 57 26 pm

Comment résoudre une telle erreur dans Swift 3.0 ?

let chartDataSet = BarChartDataSet (valeurs : dataEntries, étiquette : nil)
let chartData = BarChartData(dataSet: chartDataSet)

à propos de xVals, vous devez implémenter stringForValue.

Merci. comment dois-je implémenter stringForValue pour xVals.

Veuillez fournir rapidement 3 exemples

Bonjour,
Je viens de migrer du 2 au 3 (j'utilise le 3.0.2) et je rencontre 2 problèmes :

  • Si j'ai 0 valeurs dans mon ensemble de données, le graphique à barres est décalé, c'est étrange et j'utilise à peu près le code des exemples de démonstration. Une idée ?
  • Existe-t-il un moyen de masquer les valeurs 0 a ensemble et d'afficher simplement les valeurs > 0 ?

Merci de votre contribution.

screen shot 2017-06-09 at 12 15 13 pm
screen shot 2017-06-09 at 12 13 47 pm

en classe BarChartRenderer
en open override func drawValues(context: CGContext)
ajouter la ligne 408
```
si !dataSet.isStacked
{
pour j en 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX))
{
garde laissez e = dataSet.entryForIndex(j) comme? BarChartDataEntry else { continuer }

                    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

```

ajoute une variable si tu veux
var drawValuesZeroEnabled : Bool { get set }

Merci Thierry.
Donc c'est corrigé :)

J'ai toujours le problème de cet espacement bizarre.

Je viens donc de créer un graphique à barres par défaut avec une valeur 0 et j'ai toujours le problème - j'ai essayé de me rapprocher le plus possible d'une simple barre pour voir quel était le problème.

Cela ressemble à la démo mais dès que je mets une valeur entre 0 et 0.9999 j'obtiens ce remplissage.

Voici l'exemple de code :

    <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
    }

Assez simple.

C'est un bug ?

Problème avec 0 :
screen shot 2017-06-12 at 11 55 15 am

Non 0 :
screen shot 2017-06-12 at 12 21 20 pm

Merci pour l'aide ;)

Où puis-je trouver des documents sur l'ancienne API pour les graphiques ? Je n'ai jamais utilisé ce framework (à part le mettre à jour plusieurs fois) et je dois passer de 2.3 à 3.0.4, donc les anciens documents seraient bien pour comprendre l'ancien code, par exemple :

[entrySet addObject:[[ChartDataEntry alloc] initWithValue: item.avgSpeed xIndex:index]];

Maintenant, il n'y a pas d'init appelé initWithValue: xIndex , mais plutôt un init appelé :

initWithX: y: , j'essaie donc de comprendre quels étaient les anciens paramètres et comment utiliser le nouveau init pour obtenir le même résultat ...

De plus, le tableau valuesObjc est manquant maintenant :

//myLineChartView is LineChartView
 NSDate* date = (NSDate*)[myLineChartView.xAxis.valuesObjc objectAtIndex:index];

Comme je l'ai dit, je n'ai jamais utilisé ce framework, donc de l'aide serait appréciée, ou au moins un lien vers les anciennes docs API serait utile...

Je ne pense pas qu'une telle ressource existe. Vous pouvez vérifier la branche legacy/2.3 pour vérifier les démos et autres par rapport aux autres versions actuelles.

BarChartData.init(xVals : xVals, dataSets : dataSets) ne peut pas fonctionner. qu'est-ce que le remplacer?

Comment puis-je faire défiler la valeur x du graphique linéaire vers le centre par programmation ?

Cette page vous a été utile?
0 / 5 - 0 notes