2015-12-10 8 views
5

ich mir eine Übung gab Swift zu lernen, basierend auf einem Beispiel, das ich auf dem Apple Swift gefunden haben website:Zeichnung Punkte und Linien auf einem UIView

enter image description here

Wie Sie gibt es einen Fluss sehen und ein paar Punkte in der Mitte, die einen Pfad bilden. Also habe ich im Internet nach einem ähnlichen Flussbild gesucht und einen Xcode-Spielplatz erstellt. Das ist, was ich habe jetzt:

enter image description here

Also im Grunde habe ich eine UIView mit einem Subview in dem Fluss bestehend ich gefunden habe, und einen Punkt gemacht mit UIBezierPath.

Meine erste Frage ist: Ist das der richtige Weg, um auf eine UIView gezogen? Ich meine mit einem UIBezierPath. Und meine zweite Frage ist: Wie zeichne ich den Punkt an einer genauen Koordinate innerhalb der UIView? (UIBezierPath oder alles andere?)

Genau genommen ist meine Absicht hier, einen Algorithmus zu machen, damit das Programm das Bild erkennt und basierend auf der Pixelfarbe würde es eine Linie mit Punkten vom Anfang bis zum Zeichnen zeichnen Ende des Flusses, zwischen seiner Mitte.

+0

Es ist hier völlig ok UIBezierPaths und CAShapeLayers zu verwenden, um die Kreise zu ziehen und ‚verbinde die Punkte‘. UIBezierPath hat viele Methoden wie 'moveToPoint:', damit Sie die Linie zeichnen können. Der CAShapeLayer kann diese Linie dann darstellen, so dass Sie Attribute wie Strichbreite, Farben usw. hinzufügen können. –

Antwort

7

zeichnen UIBezierPath auf UIView dies tun:

let xCoord = 10 
let yCoord = 20 
let radius = 8 

let dotPath = UIBezierPath(ovalInRect: CGRectMake(xCoord, yCoord, radius, radius)) 

let layer = CAShapeLayer() 
layer.path = dotPath.CGPath 
layer.strokeColor = UIColor.blueColor().CGColor 

drawingView.layer.addSublayer(layer) 

Dieser Code einen Punkt mit einem Radius von 8 mit den Koordinaten 10,20 auf Ihrer Ansicht ziehen wird. Hier

1

ist ein Versuch, die Linien ein Teil der Gleichung:

var offset:CGFloat = 0; var squareWidth:Int = 20 
    var squareRows:Int = Int(view.frame.size.width/CGFloat(squareWidth)) 
    var squareColumns:Int = Int(view.frame.size.height/CGFloat(squareWidth)) 

    for (index,element) in (0...squareRows).enumerate(){ 
     for (column,element) in (0...squareColumns).enumerate(){ 
      // Build The Square 
      let rectanglePath = UIBezierPath(roundedRect: CGRectMake(
       view.frame.minX + CGFloat(squareWidth * index) - offset, 
       view.frame.minY + CGFloat(column * squareWidth), 20, 20 
       ), 
       cornerRadius: 0.00) 

      // Style Square 
      let a = CAShapeLayer() 
       a.path = rectanglePath.CGPath 
       a.strokeColor = UIColor.whiteColor().CGColor 
       a.fillColor = nil 
       a.opacity = 0.3 
       a.lineWidth = 1.5 
      view.layer.insertSublayer(a, atIndex: 1) 
     } 
    } 

View Rendered with layers