Horizontales Scrollen nur im Core-Plot-Balkendiagramm zulassen?

8

Ich verwende core-plot lib, um Balkendiagramme in meiner App so zu zeichnen

Mein Problem ist, dass ich die Grapgh-Bewegung nur in horizontaler Richtung aktivieren möchte, so dass ich die Aufzeichnungen für eine lange Zeit sehen kann. Aber das Problem ist, dass ich einfach die y-Achse an ihrem Platz fixiere.

Wie kann ich das tun?

Warten auf Hilfe ....

    
Madhup Singh Yadav 12.12.2009, 06:18
quelle

11 Antworten

10

Erst kürzlich wurde die rudimentäre Benutzerinteraktion in Core Plot-Diagrammen aktiviert. Um das Scrollen in eine beliebige Richtung zu ermöglichen, können Sie die Eigenschaft allowsUserInteraction des Zeichnungsbereichs auf YES setzen.

Gegenwärtig haben wir keine Möglichkeit, diese Bewegung in eine Richtung zu sperren. Die Scrolling-Aktion findet in der Methode -pointingDeviceDraggedAtPoint: auf CPXYPlotSpace statt, so dass Sie CPXYPlotSpace unterklassen können, die Implementierung dieser Methode kopieren und so ändern, dass nur Bewegung in X-Richtung möglich ist. Noch besser, wir würden uns über jeden Beitrag freuen, der die Funktionalität des CPXYPlotSpace erweitert, um Unterstützung für unidirektionale Bewegungen hinzuzufügen.

    
Brad Larson 12.12.2009, 16:10
quelle
21

Wenn Sie Core-Plot 0.2.2 oder höher (möglicherweise früher) verwenden, können Sie eine Methode für den Delegaten Ihres Plot-Bereichs hinzufügen, um Folgendes zu behandeln:

%Vor%

Dadurch wird die Bewegung des Diagramms auf nur horizontal beschränkt. Dies setzt voraus, dass Sie die Interaktion mit dem Zeichenbereich zugelassen haben, indem Sie lensUserInteraction = YES setzen.

    
Steve Tranby 29.12.2010 23:42
quelle
14

Begrenzen Sie das Scrollen, indem Sie einen Delegaten (d. h. CPPlotSpaceDelegate) für den Zeichenbereich festlegen und die Methode "willChangePlotRangeTo" implementieren. Sie können andere coole Dinge gleichzeitig tun. So beschränke ich die Anzeige auf Quadrant eins:

%Vor%

Siehe: CPPlotSpace.h

    
Tom Donaldson 05.04.2010 19:28
quelle
12

Ich habe einen einfachen Weg benutzt, um den vertikalen Bildlauf zu deaktivieren

%Vor%

Für, minY und maxY gebe ich die Werte ein, die ich angezeigt habe, so wie die vertikalen Grenzen, die Sie sehen, so dass Sie nicht vertikal scrollen können

Es funktionierte für mich, nachdem ich dein Thema gesehen hatte, also wollte ich deine Antworten mit mir vervollständigen

    
ciwol 03.01.2011 13:58
quelle
10

Verwendung von CorePlot 1.0 - Um das Scrollen auf nur horizontale und Skalierung einzuschränken, habe ich die zwei CPTPlotSpaceDelegate-Methoden implementiert: Methode von Steve Tranby mit einer modifizierten Methode, vorgeschlagen von superAly / edo42.

%Vor%     
Jay 15.03.2012 14:25
quelle
2

Ich verwende CorePlot 0.2.2

%Vor%

Sie müssen CPPlotSpaceDelegate, CPLineStyleDelegate-Protokolle zu Ihrem Controller hinzufügen

und hinzufügen (für CPLineStyleDelegate)

%Vor%

Das System behält den ursprünglichen Bereich der Y-Achse bei

    
supperAly 24.01.2011 12:32
quelle
2

Alles was Sie tun müssen, um die y-Achse nach Antwort 4 mit dem Kommentar inkl. ( newRange.doublePrecisionLocation ist jetzt newRange.locationDouble ) soll plotSpace.globalYRange = plotSpace.yRange;

setzen     
Abhi 10.09.2010 05:35
quelle
1

Danke an SupperAly wenn meine Schnittstelle das "CPPlotSpaceDelegate" -Protokoll implementiert und das Projekt kann nicht normal befolgt werden und zeigt Folgendes:   your interface xxx doesn't implement 'CPLineStyleDelegate' protocol , die mich verwirren lassen. also füge ich die Methode hinzu: -(void)lineStyleDidChange:(CPLineStyle *)lineStyle { //empty } für CPLineStyleDelegate und fügen Sie <CPLineStyleDelegate> zu meiner Schnittstelle hinzu und die Probleme sind weg.

    
xiaonan 27.04.2011 07:40
quelle
1

Der folgende Code basiert auf Tom Donaldsons Antwort und wurde mit CorePlot 1.5.1 getestet:

%Vor%     
Anh Do 02.07.2014 07:46
quelle
0

Sie können das

überschreiben %Vor%

Funktion in CPTXYPlotSpace und entfernen Sie den gesamten Code für die Bewegung für die y-Achse.

    
Rex 19.09.2011 20:55
quelle
0

@Andrew S: "Ich bekomme" Zuweisung zur schreibgeschützten Eigenschaft "auf newRange.location = CPTDecimalFromFloat (0.0); "

Ich hatte das auch und habe nach dem Beispiel "CurvedScatterPlot" in der Core-Plot-Galerie-App eine veränderbare Kopie von newRange in plotSpace verwendet: willChangePlotRangeTo: forCoordinate: ...

CPTMutablePlotRange * changedRange = [neueRange mutableCopy];

changedRange.location = CPTDecimalFromCGFloat (0.0F); dann passiert muster und ich benutze changedRange im if ... else block.

    
Nick Staresinic 14.04.2013 02:07
quelle