2011-01-09 12 views
9

Jestem nowy w programowaniu komputerów Mac i chcę uruchamiać zdarzenia, gdy kursor wchodzi lub wychodzi z głównego okna. Czytałem coś o NSTrackingArea, ale nie rozumiem dokładnie, co robić.Jak korzystać z NSTrackingArea

Odpowiedz

13

Apple dostarcza dokumentację i przykłady dla NSTrackingAreas.

Najprostszym sposobem śledzenia, kiedy mysz wchodzi lub istnieje, jest ustawienie obszaru śledzenia w treści okna. To jednak nie będzie śledzić pasek narzędzi okna za

Podobnie jak szybki przykład w niestandardowym Treści kodzie:

- (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. 
} 

Należy również wdrożyć NSView za updateTrackingAreas metody i przetestowania obszaru śledzenia wydarzenia, aby upewnić się, to jest właściwy.

+1

Okay, to będzie pytanie noob, ale gdzie muszę umieścić kod? Gdzie mogę znaleźć kod widoku niestandardowego? Czy muszę podłączyć obiekt do widoku w programie Interface Builder, tak jak robię to podczas korzystania z gniazdek i działań? – icant

+3

Ten kod powinien zostać umieszczony w niestandardowej podklasie UIView. Następnie niestandardowy UIView powinien zostać dodany jako widok zawartości okna. Za pomocą Konstruktora interfejsów utwórz lub wybierz widok treści dla okna i określ jego klasę, używając panelu Inspektora Konstruktora interfejsów, aby była klasą niestandardowego interfejsu UIView. –

+0

Dzięki stary, to działa! – icant

5

Odpowiedź od Matt Bierner bardzo mi pomogła; wymagające wdrożenia metody -viewWillMoveToWindow:.

Chciałbym również dodać, że będzie trzeba także realizować to, jeśli chcesz obsługiwać obszary śledzenia gdy widok jest zmieniany:

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

w niestandardowej podklasy, aby obsługiwać zmieniający geometrię widoku za; To będzie automatycznie wywoływane dla Ciebie.

+15

Jeśli nie chcesz ponownie obliczać obszaru śledzenia po zmianie rozmiaru widoku, użyj opcji ** NSTrackingInVisibleRect ** podczas tworzenia ** NSTrackingArea **. – Mark

+2

@mark Twój komentarz jest jedną z najważniejszych notatek na tej stronie! – Kyle