J'utilise Core-Traquet Lib pour dessiner des graphiques de barres dans mon application comme ceci p>
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, p>
Comment puis-je faire cela? P>
En attente de l'aide ... P>
11 Réponses :
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é Nous n'avons actuellement aucun moyen de verrouiller ce mouvement dans une direction. L'action de défilement a lieu dans la méthode code> -PoindreDeviceDraggedatPoint: code> 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. P> permet une propriété code> de l'espace de tracé sur Oui. P>
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?
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: voir: cppplotspace.h p> p>
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
Tout ce que vous devez faire pour réparer l'axe Y après la réponse 4 avec le commentaire incl. ( newrange.doubleproCisionLocation code> est maintenant
newrange.locationdouble code>) est de définir
plotspace.globalyrange = plotspace.yrange; code> p> p>
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); }
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
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;
Est-il possible de limiter le défilement à l'axe X négatif?
J'utilise CorePlot 0.2.2
-(void)lineStyleDidChange:(CPLineStyle *)lineStyle { //empty }
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» Code>, ce qui me rend confondre.
Donc, j'ajoute la méthode:
- (vide) lintyleDideChange: (cplinestyle *) lintyle {// vide} code>
Pour CplinestyestLeLeLegate et ajouter
Vous pouvez remplacer la fonction
-(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint`
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; }
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é
@andrew s: "Je reçois" l'affectation de la propriété en lecture seule "sur newrange.location = cptDecimalfromfloat (0.0); " p>
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: ... p>
CptmutablePlotrange * changetrange = [NewRange mutablecopyCopy]; p>
changetrange.location = cptdecimalfromcgfloat (0.0f); puis passe le rassemblement et j'ai utilisé changé de change dans le block si ... sinon bloquer. P>
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; }
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.