2011-01-09 9 views
9

Soy nuevo en la programación de Mac y deseo disparar eventos cuando el cursor entra o sale de la ventana principal. Leí algo sobre NSTrackingArea, pero no entiendo exactamente qué hacer.Cómo usar NSTrackingArea

Respuesta

13

Apple proporciona documentación y ejemplos para NSTrackingAreas.

La manera más fácil de rastrear cuando un mouse entra o existe una ventana es configurando un área de rastreo en contentView de la ventana. Sin embargo, esto no hará un seguimiento de la barra de herramientas de la ventana

Así como un rápido ejemplo, en el código de la vista de contenido personalizado:

- (void) viewWillMoveToWindow:(NSWindow *)newWindow { 
    // Setup a new tracking area when the view is added to the window. 
    NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil]; 
    [self addTrackingArea:trackingArea]; 
} 

- (void) mouseEntered:(NSEvent*)theEvent { 
    // Mouse entered tracking area. 
} 

- (void) mouseExited:(NSEvent*)theEvent { 
    // Mouse exited tracking area. 
} 

También debe poner en práctica de NSView updateTrackingAreas método y probar área de seguimiento del evento para asegurarse es el correcto.

+1

Bien, esta será una pregunta novato, pero ¿dónde tengo que colocar el código? ¿Dónde puedo encontrar el código de la vista personalizada? ¿Debo conectar un objeto a la vista en Interface Builder como lo hago cuando uso puntos de venta y acciones? – icant

+3

Este código debe colocarse en una subclase UIView personalizada. Luego, la UIView personalizada debe agregarse como la vista de contenido de la ventana. Usando Interface Builder, cree o seleccione una vista de contenido para la ventana y especifique su clase, usando el panel de inspectores de Interface Builder, para ser la clase de su UIView personalizada. –

+0

Gracias, hombre, funciona! – icant

5

La respuesta por Matt Bierner realmente me ayudó; necesidad de implementar el método -viewWillMoveToWindow:.

Me gustaría también añadir que también tendrá que poner en práctica esta opción si desea manejar las áreas de seguimiento cuando la vista se cambia el tamaño:

- (void)updateTrackingAreas 
{ 
    // remove out-of-date tracking areas and add recomputed ones.. 
} 

en la sub-clase personalizada, para manejar la geometría cambiante de la vista; esto se invocará automáticamente.

+15

Si no desea recalcular el área de seguimiento una vez que se ha cambiado el tamaño de una vista, use la opción ** NSTrackingInVisibleRect ** al crear ** ** NSTrackingArea **. – Mark

+2

@mark ¡tu comentario es una de las notas más importantes de esta página! – Kyle