web-dev-qa-db-fra.com

Comment changer la couleur d'un UIBezierPath dans Swift?

J'ai une instance de UIBezierPath et je veux changer la couleur du trait en autre chose que du noir. Est-ce que quelqu'un sait comment faire cela dans Swift?

17
bhzag

Avec Swift 5, UIColor a une méthode setStroke() . setStroke() a la déclaration suivante:

func setStroke()

Définit la couleur des opérations de contour suivantes sur la couleur que le récepteur représente.

Par conséquent, vous pouvez utiliser setStroke() comme ceci:

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

Le code Playground ci-dessous montre comment utiliser setStroke() avec UIBezierPath afin de dessiner un cercle avec une couleur de remplissage verte et une couleur de trait gris clair à l'intérieur d'une sous-classe UIView:

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
40
Imanou Petit

Supposons que vous souhaitiez utiliser la couleur rouge à la place pour tracer un rectangle arrondi; Voici comment vous le faites dans Swift 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

Les deuxième et dernière lignes du code ci-dessus sont importantes pour répondre à votre question. J'espère que cette réponse vous sera utile.

2
Lehlohonolo_Isaac