2017-04-02 10 views
0

Ich verwende die erstaunliche Charts library, um einige Daten zu plotten. Mein Diagramm enthält einen Satz von ChartLimitLine s, und der Abstand zwischen zwei dieser Zeilen kann klein sein. Als Ergebnis kann die Markierung einer Grenzlinie die folgende Grenzlinie überlappen. Um dies zu vermeiden, möchte ich das Etikett so drehen, dass der Text vertikal statt horizontal angezeigt wird. Ich weiß, dass ich limitLine.labelPosition = .leftBottom verwenden kann, um das Etikett an eine andere Position zu bewegen, aber ich muss auch das Etikett drehen. Ich habe den Quellcode von ChartLimitLine und Android counterpart (die iOS-Bibliothek ist ein Klon der MPAndroidChart-Bibliothek) durchsucht, und es scheint, dass es keine API-Funktion gibt, um dies zu erreichen. Wie erreiche ich das alleine? Ich vermute, dass ich eine benutzerdefinierte Ansicht erstellen muss, aber ich bin relativ neu für das iOS SDK, also würden alle Vorschläge, wie man sich diesem nähert, sehr geschätzt.danielgindi/Charts: Etikett von ChartLimitLine um 90 Grad drehen?

Danke!

+0

Für MPAndroidChart müssten Sie einen benutzerdefinierten Renderer schreiben. Sehen Sie sich die Renderer-Klassen in der Quelle an. Es gibt einige Beispiele für benutzerdefinierte Renderer auf Stack-Überlauf sowie –

+0

https://github.com/danielgindi/Charts/blob/master/Source/Charts/Renderers/XAxisRenderer.swift –

Antwort

0

Der Schlüsselpunkt des rotierenden Etikettentexts ist, wo der Ankerpunkt ist.

Dann brauchen Sie nur Core Graphics API wie CGContextRotateCTM()

Die Drehung des Zentrums ist der Ankerpunkt zu verwenden, hängt so an, wie Sie 90-Grad-Drehung erreichen wollen, gibt es mehrere Möglichkeiten, wie:

  1. Bewegen Sie den Ankerpunkt in die Mitte Ihres Text-Rect, und drehen Sie sich dort;
  2. Bewegung der Ankerpunkt auf der linken Ecke des Textes rect und drehen dort

je nachdem, wo der Ankerpunkt ist, die endgültige Position des gedrehten Text unsicher ist, so dass Sie darüber, wie denken Möchten Sie drehen und dann die Mathematik (sin, cos, etc) ausführen, um Ihren Ankerpunkt ordnungsgemäß an Ihren Standort zu verschieben und dann zu drehen. Um den Ankerpunkt zu verschieben, können Sie CGContextTranslateCTM() und andere translate APIs verwenden.

Sie haben zuerst die affine Transformationsmatrix zu verstehen (wenn Sie nicht wissen, was jetzt meine a b c d tx ty)

würde ich sehr empfehlen Sie ein Beispielprojekt erstellen, eine einzelne Ansicht mit roten Hintergrundfarbe machen, und Versuchen Sie dann zu rotieren und füllen Sie die gelbe Hintergrundfarbe, so dass Sie sehen können, wie Ihre Ansicht von Rot zu Gelb gedreht wird.

Verwandte Themen