2012-04-02 9 views
10

¿Es posible recortar partes de NSWindow o NSView y hacer que se vean? Tengo una NSWindow con un NSView y quiero bien:Orificios en NSView o NSWindow

A) hacer un agujero en el NSWindow a ser capaz de ver a través de él o

B) establecer mis antecedentes NSWindow tener un color claro y luego hacer un NSView en la parte superior y establecer una cierta parte de mi opacidad NSViews para poder ver a través del escritorio.

Este es el efecto que estoy tratando de crear:

enter image description here

+0

posible duplicado de [¿Cómo hacer que un NSView sea transparente y muestre lo que está debajo de NSWindow?] (Http://stackoverflow.com/questions/8217487/how-to-make-an-nsview-transparent-and-show- whats-under-the-nswindow) –

Respuesta

19

Sí, es posible, y en realidad no es tan difícil.

Primero, cree una subclase de NSView. En drawRect:, tipo:

NSRectFillUsingOperation(NSMakeRect(100, 100, 100, 100), NSCompositeClear); 

Esto borra todos los píxeles en el rectángulo en (100,100,100,100).

A continuación, establece la clase que acaba de hacer que la clase de vista del contenido de la ventana:

Setting the class

Asegúrese de que su NSWindow es setOpaque:NO.

[window setOpaque:NO]; 

Y listo. El fuego de su aplicación y ver el resultado:

Holy window, batman!

ensucie con el código de dibujo para conseguir la forma que desee, pero recuerde que debe utilizar NSCompositeClear. Para obtener más información sobre los modos de composición, consulte developer documentation.

+0

¡Gracias! realmente buena respuesta –

+0

¿Podría seguir usando NSCompositeClear si quisiera mantener la primera vista y agregar una segunda vista o subvista? ¿Es posible ver a través de una vista y también una ventana? –

+0

@GrantWilkinson Como muestra [esta captura de pantalla] (http://i.imgur.com/1RMRH.png), 'NSCompositeClear' en el código de dibujo de la supervista no dibujará las subvistas. 'NSCompositeClear' en el código de dibujo de la subvista, sin embargo, dibujará a través de su supervista. – spudwaffle