2016-12-17 9 views
1

大きなCGRectと小さなCGRectが1つあります。大きなCGRectを赤で描画し、小さなCGRectに対応する2つの透明な穴を作成したいと思います。macOSは内部に2つの穴を持つ長方形を描画します

私はそれを行うことができません。私はNSBezierPathを使用しようとしましたが、macOSにはNSBezierPath.CGPathメソッドがありません(例えば、iOS用のUIBezierPath)。

答えて

1

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作成し、ストーリーボードに直接追加することができます。

enter image description here

+0

2つのこと: 1)描画するどこかのパスは、私は、私はそれを 'cgContext'または何か他の参照を渡すことが予想意味、「知る」ことができます。 2)今ではこのソリューションを実装しようとしていますが、レイヤーを扱うことも可能ですか? – Nisba

+0

ビューの階層に追加するだけです。 CoreGraphicsの 'cgContext'を使う必要がある理由があるのでしょうか? – Rob

+0

いいえ私は理由はありません、私はあなたのコードをすることができます。 – Nisba

関連する問題