Pytanie Jak zmienić kolor UIBezierPath w Swift?


Mam przykład UIBezierPath i chcę zmienić kolor obrysu na coś innego niż czarny. Czy ktoś wie, jak to zrobić w Swift?


13
2017-08-27 17:07


pochodzenie


Odpowiedź POB jest tu pomocna, ale ważne jest, aby zrozumieć, że sama ścieżka Béziera nie ma koloru. Jest to opis krzywej. Tylko pióra mają kolor, a odpowiedź POB polega wyłącznie na ustawianiu koloru pisaka. - Rob Napier


Odpowiedzi:


Z Swift 3, UIColor ma setStroke() metoda. setStroke() ma następującą deklarację:

func setStroke()

Ustawia kolor kolejnych operacji obrysu na kolor reprezentowany przez odbiornik.

Dlatego możesz użyć setStroke() lubię to:

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

Poniższy kod zabaw przedstawia sposób użycia setStroke() wzdłuż UIBezierPath aby narysować okrąg z zielonym kolorem wypełnienia i jasnoszarym kolorem obrysu wewnątrz UIView podklasa:

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

31
2017-08-27 17:25





Załóżmy, że chcesz użyć koloru czerwonego zamiast tego, aby pogłaskać zaokrąglony prostokąt; Oto, jak to zrobić w 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

Druga i ostatnia linijka powyższego kodu są ważne przy odpowiadaniu na twoje pytanie. Mam nadzieję, że ta odpowiedź jest pomocna.


1
2017-10-19 06:56