2011-11-21 11 views
8

Sto creando un'applicazione per la lente di ingrandimento in osx per divertimento e mi sono imbattuto in un ostacolo a cui non riesco a trovare risposta.Come rendere trasparente NSView e mostrare cosa c'è sotto NSWindow?

Ho un NSView all'interno di NSWindow Ho impostato la vista su clearColor e l'alpha su .25, ma non riesco a capire come rendere trasparente NSWindow dietro NSView in modo da poter vedere le cose sotto l'applicazione quando è selezionata.

Stato scavando attraverso doc non riesco a trovare quello che sto cercando per eventuali pensieri?

Grazie

risposta

20

Forse cercano NSWindow'ssetOpaque: ed è inoltre necessario impostare il colore di sfondo della finestra con un colore trasparente (setBackgroundColor:)

Ecco il mio campione veloce ho appena fatto:

personalizzato NSView nome myView:

-(void)drawRect:(NSRect)dirtyRect 
{ 
    [[NSColor windowBackgroundColor] set]; // Using the default window colour, 
    dirtyRect.size.width /= 2; 
    NSRectFill(dirtyRect);  // Only draw the part you need. 
} 

Avanti Imposta un contenuto di una finestraVisualizza un inst ance di myView. L'ho fatto in IB ma puoi impostarlo manualmente tramite setContentView.

E ho configurato la finestra come questa:

[myWin setOpaque:NO]; //Tells the window manager that the window might have transparent parts. 
[myWin setBackgroundColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.0]]; //Tells the window to use a transparent colour. 

e questo è quello che ottengo.

Window with partially transparent http://i44.tinypic.com/a41jxi.jpg

Così come ho detto, è necessario dire la finestra per utilizzare un colore invisibile come sfondo, quindi ridisegnare le parti che in realtà fanno necessità disegnato.

+0

Ho pensato a questo, ma quelli impostati per l'intera NSWindow non solo una parte di esso. – acreek

+0

Per "intera NSWindow" si intende "barra del titolo + contenuto" o tutta l'area del contenuto? Non penso che sia possibile impostare una parte dei contenuti della finestra trasparente, si dovrebbe rendere tutto trasparente e disegnare ciò che non si desidera rendere trasparente. –

+1

@acreek: Penso che avrebbe senso chiamare '[mywindow setOpaque: NO]' quando vuoi che parte della finestra sia trasparente. Potrebbe anche essere necessario chiamare 'setBackgroundColor:'. I documenti potrebbero sicuramente essere più chiari. – JWWalker

Problemi correlati