2016-04-29 12 views
0

Ich möchte iOS-Diagramme mit Swift verwenden, um einige Liniendiagramme zu zeichnen, um die Daten anzuzeigen. Jetzt habe ich eine Anforderung, die neben jedem Punkt ein kleines Symbol setzt.iOS-Diagramme Wie setze ich UIImage neben einen Punkt

enter image description here

Jetzt kann ich UIImage auf dem Graphen hinzufügen, aber das Problem ist, wie kann ich die CGPoint Koordinaten jeden Punkt korrekt erhalten.

Wenn ich die Ausrichtung des Geräts oder Gerätetyps ändern, ist die Position der Bilder noch festgelegt, nicht entsprechend ändern. Hier ist iPhone 6s Bild.

enter image description here

Hier ist meine aktuellen Code ist:

for i in 0..<dataPoints.count { 
     let pointLeft = lineChartView.getPosition(dataEntries[i], axis: .Left) 

     let image = UIImage(named: numbers[i]) 
     let imageView = UIImageView(image:image!) 
     imageView.frame = CGRect(x: pointLeft.x, y: pointLeft.y, width: 16, height: 16) 
     lineChartView.addSubview(imageView) 

    } 

Antwort

2

Sie private func drawCircles(context context: CGContext) innerhalb LineChartRenderer.swift ändern können folgendes zu tun: in der Schleife, wo die Kreise Verwendung pt var Zeichnung, die dort berechnet wird und Fügen Sie etwas wie folgt hinzu:

let image = UIImage(named: numbers[i]) 
image?.drawInRect(CGRect(x: pt.x, y: pt.y, width: 16, height: 16)) 

Natürlich müssen Sie mit CGRect spielen, um Bilder so zu platzieren, wie Sie es benötigen. Diese Methode wird jedes Mal aufgerufen, wenn sich die Geräteausrichtung ändert usw.

+0

Sie können tatsächlich von LineChartRenderer erweitern und drawExtras (CGContext) überschreiben. Dies liegt daran, dass drawCircles (CGContext) als Dateiprivat deklariert ist. Sobald Sie Ihre LineChartView haben, können Sie Ihren neu erweiterten LineChartRenderer mit NewChartRenderer zuweisen (dataProvider: lineChartView, animator: lineChartView.chartAnimator, viewPortHandler: lineChartView.viewPortHandler). lineChartView ist nur ein IBOutlet vom Typ LineChartView !. Dies ist meiner Meinung nach viel sauberer als die Änderung des ursprünglichen Codes. –