2015-09-12 1 views
0

J'essaie d'utiliser l'NSView appel getRectsBeingDrawn(_:count:) dans une application Swift, mais ne peut pas imaginer comment décompresser les valeurs 'return' - la signature de la méthode est particulièrement mystérieuse. Je reçois le nombre attendu de rectangles via la variable count, mais je ne sais pas comment accéder aux rectangles dans le tableau. This question aborde le même problème, et propose une solution, mais cela ne fonctionne pas pour moi - je ne peux pas accéder aux structures NSRect.L'utilisation de getRectsBeingDrawn: avec Swift

func decideWhatToRedraw() { 

    let r1 = CGRect(x: 0, y: 0, width: 10, height: 20) 
    let r2 = CGRect(x: 0, y: 100, width: 35, height: 15) 

    setNeedsDisplayInRect(r1) 
    setNeedsDisplayInRect(r2) 
} 

override func drawRect(dirtyRect: NSRect) { 
    var rects: UnsafeMutablePointer<UnsafePointer<NSRect>> = UnsafeMutablePointer<UnsafePointer<NSRect>>.alloc(1) 
    var count: Int = 0 
    getRectsBeingDrawn(rects, count: &count) 

    // count -> 2 
    // But how to get the rects? 
} 

Répondre

1

Voici ce que vous voulez:

var rects = UnsafePointer<NSRect>() 
var count = Int() 
getRectsBeingDrawn(&rects, count: &count) 

for i in 0 ..< count { 

    let rect = rects[i] 

    // do things with 'rect' here 

} 

Vous faites deux variables rects et count, et passer des références à tous les deux, ils se remplissent de l'information. Après avoir appelé le getRectsBeingDrawn, points count rectangles, auxquels vous pouvez accéder avec un indice, comme un tableau.

+0

Ace! - Merci. Je mettrai à jour la question que j'ai référencée pour souligner cette approche beaucoup plus directe (et réussie). –

+0

Swift 4: 'init() est indisponible: utiliser nil literal' – adib