2016-03-26 18 views
0

Ich habe eine benutzerdefinierte Klasse, die eine benutzerdefinierte Ansicht mit einer horizontalen Mitte auf dem Bildschirm verwaltet (die eine durchgezogene Linie darstellt). Und ich habe die Zeile wie folgt gezeichnet:Zeichnen mehrerer Kreise in einer einzelnen Zeile CGGraphicsContext

override func drawRect(rect: CGRect) 
    { 
    let line = UIGraphicsGetCurrentContext() 
      CGContextSetLineWidth(line, 3.0) 
      CGContextSetStrokeColorWithColor(line, UIColor.redColor().CGColor) 

      CGContextMoveToPoint(line, 0, self.bounds.midY) 
      CGContextAddLineToPoint(line, self.bounds.width, self.bounds.midY) 

      CGContextStrokePath(line) 
    }  

Ich brauche aber einen mehr vollen Kreise auf dieser Linie zu ziehen und versuchen, es in einem Diagramm wie ein Punkt zu suchen. Ich versuche tatsächlich, eine Mini-Chart-Darstellung zu machen. Wie kann ich die Kreise zeichnen? Mit einer geschachtelten "for in" -Schleife oder? Gibt es eine offizielle Diagramm-API von Apple?

Antwort

1

UIGraphicsGetCurrentContext() gibt Ihnen einen Kontext, in den Sie mehrere Dinge zeichnen können. Es line anrufen ist nicht die richtige Idee, weil es mehrere Zeilen oder Kreise oder alle möglichen anderen Dinge enthalten kann.

Denken Sie an den Kontext als Künstler, der vor einer leeren Leinwand sitzt. Sie geben dem Künstler Anweisungen wie "Zeichnen Sie eine rote Linie, dann zeichnen Sie einen blauen Kreis". Der Künstler folgt den Anweisungen, und danach schauen Sie auf die Leinwand.

So können Sie eine Linie und dann einen Kreis zeichnen.

let context = UIGraphicsGetCurrentContext() 

    // Tell the context what stroked paths should look like 
    CGContextSetLineWidth(context, 3.0) 
    CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor) 

    // Draw a single line 
    CGContextMoveToPoint(context, 0, self.bounds.midY) 
    CGContextAddLineToPoint(context, self.bounds.width, self.bounds.midY) 
    CGContextStrokePath(context) 

    // Now draw a circle by filling a path. 
    // First, set the fill color: 
    CGContextSetFillColorWithColor(context, UIColor.blueColor().CGColor) 

    // Specify how big the circle is, and where its center is: 
    let circleRadius = CGFloat(5.0) 
    let circleCenter = CGPoint(x: self.bounds.midX, y: self.bounds.midY) 
    // Then add a circle to the context, by specifying the rectangle that surrounds it: 
    let circleRect = CGRect(x: circleCenter.x - circleRadius, 
          y: circleCenter.y - circleRadius, 
          width: circleRadius * 2, 
          height: circleRadius * 2) 
    CGContextAddEllipseInRect(context, circleRect) 

    // And fill that circle: 
    CGContextFillPath(context) 

Wenn Sie mehr Kreise zeichnen, sondern an verschiedenen Orten, rufen Sie einfach CGContextAddEllipseInRect und CGContextFillPath wieder, aber mit unterschiedlichen Werten für circleRect. Je nachdem, was Sie wollen, könnte eine for-Schleife angebracht sein. Es liegt ganz bei Ihnen.

Wenn Sie es nicht selbst schreiben möchten, gibt es viele Drittanbieter-Diagrammbibliotheken, einfach eine Suche durchführen. Apple bietet keine "offizielle" an.