2016-05-02 18 views
0

Wie kann ich das Innere des UIBezier-Pfades farbig gestalten? Ich mache ein einfaches Dreieck und möchte innerhalb des Dreiecks mit roter Farbe färben.UIBezierPath in Swift archivieren

class GraphView : UIView { 

    override func drawRect(rect: CGRect) { 

     UIColor.redColor().setFill() 
     UIColor.greenColor().setStroke() 

     let path = UIBezierPath(rect: rect) 
     path.moveToPoint(CGPointMake(100,620)) 
     path.addLineToPoint(CGPointMake(300,100)) 
     path.addLineToPoint(CGPointMake(500,620)) 
     path.addLineToPoint(CGPointMake(100,620)) 

     path.closePath() 

     path.fill() 
     path.stroke() 

    } 

} 


let graphView = GraphView(frame: CGRectMake(0,0,960,640)) 
XCPlaygroundPage.currentPage.liveView = graphView 

Der obige Code wird auf dem Spielplatz geschrieben: Hier ist das Ergebnis:

enter image description here

+0

Tut mir leid! Die Frage wurde mit Code und neuem Screenshot aktualisiert. –

Antwort

1

Das Problem ist, wie Sie Ihre UIBezierPath sind zu schaffen. Sie erstellen es mit einem Rechteck aus den Begrenzungen der Ansicht und fügen dann innerhalb dieses Rechtecks ​​ein Dreieck hinzu. Daher werden beide gefüllt - was dazu führt, dass die gesamte Ansicht rot ist.

Wenn Sie usesEvenOddFillRule zu true gesetzt, werden Sie besser das Ergebnis des unerwünschten Rechteck in Ihrem Weg sehen:

enter image description here

Wenn Sie nur ein Dreieck dann ersetzen Sie diese Zeile füllen wollen:

let path = UIBezierPath(rect: rect) 

mit diesem:

let path = UIBezierPath() 

Dadurch wird ein neuer leererUIBezierPath erstellt, dem Sie Ihr Dreieck hinzufügen können.

+0

Danke! Eine Sache, die mich irritiert, ist, dass selbst wenn ich die letzte Zeile auslasse: path.addLineToPoint (CGPointMake (100,620)), erzeugt es immer noch das Dreieck. Ist es nicht erforderlich, dass die letzte Zeile das Dreieck vervollständigt? –

+1

@johndoe 'path.closePath()' erstellt das Dreieck, indem der letzte Punkt des Pfades mit dem ersten Punkt des Pfades verbunden wird (mit einer geraden Linie) - also ist diese letzte Zeile tatsächlich redundant. Beachten Sie auch, dass 'path.fill()' den Pfad implizit schließt (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIBezierPath_class/#/apple_ref/occ/instm/UIBezierPath /füllen). – Hamish