Można użyć następującego fragmentu kodu, aby ukryć dachówka dok z procesu, który nie jest aktywny:
- (void)applicationWillResignActive:(NSNotification *)notification
{
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
if([self.window isVisible])
{
[self.window performSelector:@selector(orderFrontRegardless) withObject:nil afterDelay:0.05];
}
}
- (void)applicationWillBecomeActive:(NSNotification *)notification
{
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
SetFrontProcessWithOptions(&psn, kSetFrontProcessCausedByUser);
}
Wystarczy dodać powyższy kod do delegata aplikacji i ikona Dock aplikacji zniknie po zakończeniu procesu.
Aby okno było widoczne po przekształceniu procesu w aplikację UIElement, wyślij wiadomość o następującej treści: orderFrontRegardless
. (Bardzo hacky, wiem - ale to musi być cena za niestandardowe działanie okna/procesu)
Prawdopodobnie powinieneś również utrzymywać menu Dock, które pozwala użytkownikom wybrać ukryte okna.
Możesz dynamicznie dodawać wpisy z "głównej" aplikacji. Szczegółowe informacje można znaleźć w sekcji Przewodnik po płytkach dokujących w numerze "Dynamically Adding Menu Items With the Application Delegate".
Aktualizacja:
ja lekko zmienił kod przykładowy powyżej jak poprzednie podejście doprowadziło do non-responsive głównego menu po ponownym uruchomieniem aplikacji.
Czy nie spowoduje to również problemu, w którym pasek menu mojego okna zniknie, gdy proces przejdzie w tryb UIElementApplication? –
Nie, ponieważ proces jest automatycznie przekształcany w proces pierwszego planu, gdy tylko aplikacja ponownie stanie się aktywna (np. Przez kliknięcie okna). Będziesz jednak musiał znaleźć rozwiązanie dla zamkniętych/ukrytych okien. Możesz łatwo przetestować zachowanie powyższego kodu, umieszczając go w delegacie aplikacji pustego projektu Xcode. –
Zbudowałem powyższy kod z pustym projektem Xcode ... ikona Docku zniknęła po kliknięciu poza oknem, ale kiedy ponownie ustawiłem okno na ostrości, pasek menu był niefunkcjonalny: mogłem to zobaczyć, ale kliknięcie nie miało żadnego efektu (tzn. menu nie spadło). :( –