2014-08-27 34 views
11

Ich habe eine Instanz von UIBezierPath und ich möchte die Farbe des Strichs zu etwas anderem als schwarz ändern. Weiß jemand, wie man das in Swift macht?Wie ändert man die Farbe eines UIBezierPath in Swift?

+6

POBs Antwort ist hier hilfreich, aber es ist wichtig zu verstehen, dass ein Bézier-Pfad selbst keine Farbe hat. Es ist eine Beschreibung einer Kurve. Nur Stifte haben Farbe, und die Antwort von POB dreht sich nur um die Stiftfarbe. –

Antwort

27

Mit Swift 3 hat UIColor eine setStroke() Methode. setStroke() hat die folgende Erklärung ab:

func setStroke() 

Legt die Farbe der nachfolgenden Hub-Operationen auf die Farbe, die der Empfänger darstellt.

Daher können Sie setStroke() wie folgt verwenden:

strokeColor.setStroke() // where strokeColor is a `UIColor` instance 

Kreativer Code unten zeigt, wie setStroke() neben UIBezierPath verwenden, um einen Kreis mit einem grünen Füllfarbe und ein Licht zu zeichnen graue Strichfarbe innerhalb einer UIView Unterklasse:

import UIKit 
import PlaygroundSupport 

class MyView: UIView { 

    override func draw(_ rect: CGRect) { 
     // UIBezierPath 
     let newRect = CGRect(
      x: bounds.minX + ((bounds.width - 79) * 0.5 + 0.5).rounded(.down), 
      y: bounds.minY + ((bounds.height - 79) * 0.5 + 0.5).rounded(.down), 
      width: 79, 
      height: 79 
     ) 
     let ovalPath = UIBezierPath(ovalIn: newRect) 

     // Fill 
     UIColor.green.setFill() 
     ovalPath.fill() 

     // Stroke 
     UIColor.lightGray.setStroke() 
     ovalPath.lineWidth = 5 
     ovalPath.stroke() 
    } 

} 

let myView = MyView(frame: CGRect(x: 0, y: 0, width: 200, height: 300)) 
PlaygroundPage.current.liveView = myView 
1

Nehmen wir an, Sie möchten stattdessen die Farbe Rot verwenden, um ein abgerundetes Rechteck zu streichen. Dies ist, wie Sie es in Swift do 3:

// Drawing the border of the rounded rectangle: 
    let redColor = UIColor.red 
    redColor.setStroke() // Stroke subsequent views with a red color 
    let roundedRectagle = CGRect(x: 0,y: 0, width: 90,height: 20) 
    let rectangleBorderPath = UIBezierPath(roundedRect: roundedRectangle,cornerRadius: 5) 
    roundedRectangle.borderWidth = 1 
    roundedRectangle.stroke() // Apply the red color stroke on this view 

Die zweite und letzte Zeile des obigen Codes sind wichtig, um Ihre question.I bei der Beantwortung hoffen, dass diese Antwort hilfreich.

Verwandte Themen