9
votes

Autoriser le défilement horizontal uniquement dans la barlart de tracé corporel?

J'utilise Core-Traquet Lib pour dessiner des graphiques de barres dans mon application comme ceci  ......

Mon problème est que je veux que je veux l'activer du mouvement de Grafgh uniquement dans la direction horizontale de sorte que je puisse voir les enregistrements pendant une longue période, mais le problème est que je ne veux que garder l'axe Y fixé à sa place,

Comment puis-je faire cela?

En attente de l'aide ...


1 commentaires

Je ne sais pas pourquoi tu as retourné mon édition la dernière fois. IMGUR est beaucoup plus rapide que FreeImageHosting.net, à quel moment que j'essaie de charger l'image dans le cadre de cette page.


11 Réponses :


11
votes

Uniquement récemment a été activé par l'utilisateur de l'utilisateur rudimentaire dans les graphiques de tracé de base. Pour activer le défilement dans n'importe quelle direction, vous pouvez définir la propriété permet une propriété de l'espace de tracé sur Oui.

Nous n'avons actuellement aucun moyen de verrouiller ce mouvement dans une direction. L'action de défilement a lieu dans la méthode -PoindreDeviceDraggedatPoint: sur CPXYPROSpace, de sorte que vous puissiez la sous-classement cpxyplotspace, copier sur sa mise en œuvre de cette méthode et la modifier pour permettre uniquement le mouvement dans la direction x. Encore mieux, nous apprécierions toutes les contributions pour étendre la fonctionnalité de l'espace CPXYPlots pour ajouter un soutien au mouvement unidirectionnel.


2 commentaires

Salut Brad, j'ai implémenté la solution comme vous l'avez dit à Stackoverflow.com/questions/1899553/... Mais je ne suis toujours pas capable de réparer l'origine


@Bradlarson est-il intégré à l'appui à cela, mais pas?



16
votes

Limiter le défilement en définissant un délégué (c'est-à-dire CPplotspaCedelegate) sur l'espace de la parcelle et mettez en œuvre la méthode WillchangePlotrANgeto. Vous pouvez faire d'autres choses cool en même temps. Voici comment je limite l'affichage à quadrant un: xxx

voir: cppplotspace.h


4 commentaires

Newrange.DouchablePrecisionLocation est maintenant Newrange.LocationDouble


Newrange.DouchablePrecisionLength est maintenant Newrange.Lengthdouble


Je reçois la mission de lire uniquement la propriété sur: newrange.location = cptdecimalfromfoat (0.0);


J'ai ajouté le code mis à jour qui fonctionne avec Coreplot 1.5.1 ici: Stackoverflow.com/a/24525631/607



3
votes

Tout ce que vous devez faire pour réparer l'axe Y après la réponse 4 avec le commentaire incl. ( newrange.doubleproCisionLocation est maintenant newrange.locationdouble ) est de définir plotspace.globalyrange = plotspace.yrange;


0 commentaires

22
votes

Si vous utilisez Core-Traque 0.2.2 ou plus (éventuellement plus tôt), vous pouvez ajouter une méthode sur le délégué de votre espace de parcelle pour gérer les éléments suivants:

-(CGPoint)plotSpace:(CPTPlotSpace *)space willDisplaceBy:(CGPoint)displacement {
    return CGPointMake(displacement.x, 0);
}


2 commentaires

Je n'ai pu obtenir que cela fonctionner après avoir fait un clone HG du référentiel. Je n'ai eu aucune chance en utilisant les installateurs.


Fonctionne bien sur CorePlot V1.1.1



13
votes

J'ai utilisé un moyen simple de "désactiver" le défilement vertical

    CPPlotRange *globalYRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(minY) length:CPDecimalFromDouble(maxY)];
    plotSpace.globalYRange = globalYRange;


1 commentaires

Est-il possible de limiter le défilement à l'axe X négatif?



3
votes

J'utilise CorePlot 0.2.2

-(void)lineStyleDidChange:(CPLineStyle *)lineStyle
{
//empty
}


0 commentaires

2
votes

Merci à Superaly Lorsque mon interface implémente le protocole "CPPlotsPaCedelegate" et le projet ne peut être respecté normalement et montre que: Votre interface XXX n'applique pas le protocole «CplinestyTestyleDelegate» , ce qui me rend confondre. Donc, j'ajoute la méthode: - (vide) lintyleDideChange: (cplinestyle *) lintyle {// vide} Pour CplinestyestLeLeLegate et ajouter à mon interface et les problèmes sont partis.


0 commentaires

0
votes

Vous pouvez remplacer la fonction

-(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint`


0 commentaires

11
votes

Utilisation de CorePlot 1.0 - Pour limiter le défilement à juste horizontal et à la mise à l'échelle, j'ai également implémenté les deux méthodes CptplotspaCedeleGate: Méthode par Steve Tranby avec une méthode modifiée suggérée par Supperaly / EDO42.

-(CGPoint)plotSpace:(CPTPlotSpace *)space willDisplaceBy:(CGPoint)displacement
{
    return CGPointMake(displacement.x, 0);
}

-(CPTPlotRange *)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate
{
    if (coordinate == CPTCoordinateY) {
    newRange = ((CPTXYPlotSpace*)space).yRange;
    }
    return newRange;
}


2 commentaires

Souhaitez-vous également partager le code de la configuration du graphique? Je veux dire le point de départ de la configuration du cptplotspace au début. J'ai suivi votre solution, mais mon seul ne fonctionne toujours pas. S'il vous plaît aider! >. <


Tu es l'homme ... merci pour la merveilleuse réponse jay ... :) voté



0
votes

@andrew s: "Je reçois" l'affectation de la propriété en lecture seule "sur newrange.location = cptDecimalfromfloat (0.0); "

J'en avais aussi que, et en suivant l'exemple "CurveVeVscatterPlot" dans l'application Core-Platial Gallery, utilisée une copie mutable de NewRange dans les parcs de remplissage: WillchangePlotrangeto: Forcoordinate: ...

CptmutablePlotrange * changetrange = [NewRange mutablecopyCopy];

changetrange.location = cptdecimalfromcgfloat (0.0f); puis passe le rassemblement et j'ai utilisé changé de change dans le block si ... sinon bloquer.


0 commentaires

2
votes

Le code suivant est basé sur Réponse de Tom Donaldson et a été testé avec CorePlot 1.5.1:

- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space
      willChangePlotRangeTo:(CPTPlotRange *)newRange
              forCoordinate:(CPTCoordinate)coordinate
{
    CPTMutablePlotRange *range = [CPTMutablePlotRange plotRangeWithLocation:newRange.location length:newRange.length];

    // Display only Quadrant I: never let the location go negative.
    //
    if (range.locationDouble < 0.0F)
    {
        range.location = CPTDecimalFromFloat(0.0);
    }

    // Adjust axis to keep them in view at the left and bottom;
    // adjust scale-labels to match the scroll.
    //
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) space.graph.axisSet;
    if (coordinate == CPTCoordinateX)
    {
        axisSet.yAxis.orthogonalCoordinateDecimal = range.location;
        axisSet.xAxis.titleLocation               = CPTDecimalFromDouble(range.locationDouble + (range.lengthDouble / 2.0F));
    }
    else
    {
        axisSet.xAxis.orthogonalCoordinateDecimal = range.location;
        axisSet.yAxis.titleLocation               = CPTDecimalFromDouble(range.locationDouble + (range.lengthDouble / 2.0F));
    }

    return range;
}


0 commentaires