2011-11-21 9 views
8

Estoy haciendo una aplicación de estilo de lupa en osx por diversión y me encontré con un inconveniente que parece que no puedo encontrar la respuesta.Cómo hacer que un NSView sea transparente y muestre qué hay debajo de NSWindow?

Tengo un NSView dentro de un NSWindow fijo el fin de clearColor y el alfa a 0.25, pero no puedo encontrar la manera de hacer que el NSWindow transparente detrás de la NSView para que pueda ver las cosas debajo de la aplicación cuando se ha seleccionado.

¿Ha estado cavando a través de los documentos no parece encontrar lo que estoy buscando alguna idea?

Gracias

Respuesta

20

Quizás tratan NSWindow'ssetOpaque: y también se necesitan para establecer el color de fondo de la ventana con un color transparente (setBackgroundColor:)

Aquí es mi muestra rápida que acabo de hacer:

encargo NSView llamado 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. 
} 

Siguiente Configuré el contenido de una ventanaVer un inst ance de myView. Lo hice en IB, pero puede configurarlo manualmente a través del setContentView.

Y he configurado la ventana como esta:

[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. 

y esto es lo que me pasa.

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

Así que como he dicho, tiene que decirle a la ventana para utilizar un color invisible como fondo, a continuación, volver a dibujar las piezas que realmente haces necesidad dibujado.

+0

Pensé en eso, pero los configuraron para toda la NSWindow, no solo una parte de ella. – acreek

+0

Por "NSWindow completa" ¿te refieres a "barra de título + contenido" o a toda el área de contenido? No creo que pueda simplemente establecer parte del contenido de la ventana como transparente, debería hacerlo todo transparente y dibujar lo que no quiere transparente. –

+1

@acreek: Creo que tendría sentido llamar '[mywindow setOpaque: NO]' cuando desee que parte de la ventana sea transparente. También podría ser necesario llamar a 'setBackgroundColor:'. Los documentos sin duda podrían ser más claros. – JWWalker

Cuestiones relacionadas