私にはわかりづらいデザイン要素があります。誰かが私を正しい方向に向けることができると願っています。私が構築しようとしている要素はそうです。UIBezierPathを使用して丸みを帯びたコーナーを描く
事実、それは左、上脳卒中、及び右側と丸みを帯びた長方形だ(底部にはストロークを有していないはずです)。
私は次のコードを使用しました。
// Create the rounded rectangle
let maskPath = UIBezierPath(roundedRect: myView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 4.0, height: 4.0))
// Setup a shape layer
let shape = CAShapeLayer()
// Create the shape path
shape.path = maskPath.cgPath
// Apply the mask
myView.layer.mask = shape
次に、私はrectを囲むようにストロークを描くために次の方法を使用しています。
// Add border
let borderLayer = CAShapeLayer()
borderLayer.path = maskPath.cgPath
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.white.cgColor
borderLayer.lineWidth = 2.0
borderLayer.frame = self.bounds
self.layer.addSublayer(borderLayer)
この結果、次のイメージになります。
私は)は、下のストロークを削除するか、UIBezierPathを(使用してアイテムを描画するためにどちらかの方法を見つけ出すことができていますが、同一であるように、角を丸めていませんでした(私は別の目的のために同じビューで別の丸い矩形を使用していますが、丸い角は同じである必要があります)。
ありがとうございます!
完全に働きました!ありがとう、@マット!私はこの方法をあまりにも過度に複雑にしていた。私は '.clear'ブレンドモードでストロークできるとは思いませんでした。今や意味をなさない! – ZbadhabitZ
丸い矩形を描く前にクリップする別の方法があります。多分私はそれを示していたはずです。 – matt
2番目の方法でクリッピングを示すコードを追加しました。私は実際にこのケースではより良いクリッピングが好きです。制御が簡単です。 – matt