2009-07-16 9 views
6

Ho bisogno di ottenere CGContextRef dell'oggetto NSView. Non sarà così male se sapessi come.Ottenere un CGContextRef di NSView all'esterno di drawRect?

In Carbon questa cosa è stato fatto in questo modo:

CGContextRef cgref = (libvlc_drawable_t)GetWindowPort(HIViewGetWindow((OpaqueControlRef*)hiViewRef)); 

Ovviamente può essere fatto da sottoclasse NSView (o è sottoclasse) e la cattura è nella sua drawRect, ma questo è troppo brutto.

Le tue idee?

+2

Non so quello che stai facendo, ma sembra qualcosa che porterà a molte frustrazioni. – Chuck

+0

Sto incorporando il video player VLC nella mia applicazione. Ho bisogno di un "drawable" a cui potrebbe ... disegnare. – Maleev

risposta

9

ho mai usato, ma si pensa che questo è il tuo modo:

[myView lockFocus]; 
imageContext = (CGContextRef)[[NSGraphicsContext currentContext] 
            graphicsPort]; 
... 
[myView unlockFocus]; 

hanno anche uno sguardo alla lockFocusIfCanDraw di NSView

+1

Questo è quello che farei anch'io, ma vale la pena di chiarire che probabilmente non dovresti contare sul fatto che il contesto sia valido oltre il messaggio 'unlockFocus'. –

+0

Ho pensato anche a questo, ma ciò che è interessante, che su MS Windows, uso l'id della finestra, che dovrebbe anche essere impermanente, e funziona bene (vedi il mio commento nel blocco domande) – Maleev