2016-12-17 1 views
1

J'ai un grand CGRect et deux petits CGRect à l'intérieur. Je veux dessiner le grand CGRect en rouge et former deux trous transparents correspondant au petit CGRect.macOS trace un rectangle avec deux trous à l'intérieur

Je ne suis pas capable de le faire. J'ai essayé d'utiliser NSBezierPath mais dans macOS il n'y a pas de méthode comme NSBezierPath.CGPath dans UIBezierPath pour iOS.

Répondre

1

Vous n'avez pas besoin d'utiliser Core Graphics. Vous pouvez créer une sous-classe NSView et simplement stroke/fill le chemin dans draw(_:). Dans Swift 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() 
    } 

} 

Vous pouvez ensuite ajouter ce point de vue programme, ou vous pouvez le faire @IBDesignable et l'ajouter directement sur votre story-board.

enter image description here

+0

Deux choses: 1) comment peut-chemin « savoir » où tirer, je veux dire que je m'y attendais à passer la référence d'un 'cgContext' ou autre chose. 2) maintenant j'essaye d'implémenter cette solution, est-il possible de travailler aussi avec des calques? – Nisba

+0

Vous venez de l'ajouter à votre hiérarchie de vue. Voulez-vous simplement afficher la vue, ou y a-t-il une raison pour laquelle vous avez besoin d'utiliser '' cgContext' de CoreGraphics? – Rob

+0

Non, je n'ai aucune raison, je peux votre code. – Nisba