1
大きなCGRectと小さなCGRectが1つあります。大きなCGRectを赤で描画し、小さなCGRectに対応する2つの透明な穴を作成したいと思います。macOSは内部に2つの穴を持つ長方形を描画します
私はそれを行うことができません。私はNSBezierPathを使用しようとしましたが、macOSにはNSBezierPath.CGPathメソッドがありません(例えば、iOS用のUIBezierPath)。
大きなCGRectと小さなCGRectが1つあります。大きなCGRectを赤で描画し、小さなCGRectに対応する2つの透明な穴を作成したいと思います。macOSは内部に2つの穴を持つ長方形を描画します
私はそれを行うことができません。私はNSBezierPathを使用しようとしましたが、macOSにはNSBezierPath.CGPathメソッドがありません(例えば、iOS用のUIBezierPath)。
Core Graphicsを使用する必要はありません。 NSView
サブクラスを作成し、stroke
/fill
のパスをdraw(_:)
に作成することができます。スウィフト3:
class HolyView: NSView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let path = ... // build the `NSBezierPath` however you want
NSColor.blue.setFill()
path.fill()
}
}
あなたは、その後、プログラムでそのビューを追加することができ、またはあなたはそれ@IBDesignable
作成し、ストーリーボードに直接追加することができます。
2つのこと: 1)描画するどこかのパスは、私は、私はそれを 'cgContext'または何か他の参照を渡すことが予想意味、「知る」ことができます。 2)今ではこのソリューションを実装しようとしていますが、レイヤーを扱うことも可能ですか? – Nisba
ビューの階層に追加するだけです。 CoreGraphicsの 'cgContext'を使う必要がある理由があるのでしょうか? – Rob
いいえ私は理由はありません、私はあなたのコードをすることができます。 – Nisba