web-dev-qa-db-ja.com

SwiftでUIBezierPathの色を変更する方法は?

UIBezierPathのインスタンスがあり、ストロークの色を黒以外に変更したい。誰かがSwiftでこれを行う方法を知っていますか?

17
bhzag

Swift 5の場合、UIColorには setStroke() メソッドがあります。setStroke()には次の宣言があります:

_func setStroke()
_

後続のストローク操作の色を、レシーバーが表す色に設定します。

したがって、次のようにsetStroke()を使用できます。

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

以下のPlaygroundコードは、UIBezierPathサブクラス内に緑色の塗りつぶし色と明るい灰色のストローク色の円を描画するためにUIViewと一緒にsetStroke()を使用する方法を示しています。

_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

代わりに、丸い長方形をストロークするために赤を使用するとします。これは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

上記のコードの2行目と最後の行は、質問への回答において重要です。この回答がお役に立てば幸いです。

2