Jak mogę wyłączyć wszystkie wejścia, gdy UIActivityIndicatorView
obraca się?Wyłącz wszystkie dane wejściowe, gdy program UIActivityIndicatorView jest odwracany.
Dzięki
Jak mogę wyłączyć wszystkie wejścia, gdy UIActivityIndicatorView
obraca się?Wyłącz wszystkie dane wejściowe, gdy program UIActivityIndicatorView jest odwracany.
Dzięki
można zadzwonić beginIgnoringInteractionEvents
po uruchomieniu spinner
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
endIgnoringInteractionEvents
i kiedy go zatrzymać.
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Wystarczy upewnić się, że kod zawsze przychodzi do punktu, gdzie można nazwać endIgnoringInteractionEvents
, w przeciwnym wypadku aplikacja będzie zamrażać (z punktu widzenia użytkownika).
Dzięki, działa dobrze. Ale jak widzę, widok "zapamiętuje" dotyk i wywołuje zdarzenie po końcuIgnoreInteractionsEvent. Czy to zachowanie można zmienić? – mica
@mica: wow, to interesująca obserwacja - nie zauważyłem tego wcześniej. Spojrzę na to. Jeśli się spieszysz, możesz "sendEvent" z głównego okna aplikacji hijaack i tam zdecydować (np. Sprawdzając flagę, czy tarcza animuje się, czy nie), jeśli wyślesz zdarzenie w dół łańcucha respondenta lub zignorujesz to . Jednym ze sposobów na hijaack tego okna jest [tutaj] (http://stackoverflow.com/questions/92511741/detect-if-the-user-has-touched-the-screen/9293321#9293321) (odpowiedź z 'MyKindOfWindow 'definicja). –
@mica: wygląda na to, że znalazłeś błąd. Według [documentation] (https://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html) nie powinno to mieć miejsca: "Wyłączenie dostarczania zdarzeń dotykowych dla Aplikacja może wywołać metodę UIApplication beginIgnoringInteractionEvents, a następnie wywołać metodę endIgnoringInteractionEvents Pierwsza metoda zatrzymuje aplikację od odbierania zdarzeń dotykowych w całości, druga metoda jest wywoływana w celu wznowienia odbioru takich zdarzeń –
Tylko dodatek do odpowiedzi na rokjarc. Oto przykład watchdoga, aby utrzymać aplikację przy życiu. Możesz zadzwonić zawsze z pewnym krytycznym interwałem, może 10 sekund. Jeśli musisz włączyć w ciągu 10 sekund, po prostu wywołaj metodę "włącz".
UIWindow * __weak mainWindow;
- (void)disableGlobalUserInteractionForTimeInterval:(NSTimeInterval)interval
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
mainWindow = [[[UIApplication sharedApplication] windows] lastObject];
});
[mainWindow setUserInteractionEnabled:false];
if (interval > 0)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self enableGlobalUserInteraction];
});
}
}
- (void)enableGlobalUserInteraction
{
if (mainWindow)
{
[mainWindow setUserInteractionEnabled:true];
}
}
w Swift 3.0:
Aby wyłączyć interakcje:
UIApplication.shared.beginIgnoringInteractionEvents()
Aby przywrócić interakcji:
UIApplication.shared.endIgnoringInteractionEvents()
Jeśli dodać tarczy do UIAlertView a następnie pokazać alert, to osiągnie to, o co prosisz. – Luke
Możesz również uzyskać ładny efekt za pomocą [MBProgressHUD] (https://github.com/matej/MBProgressHUD), ale może być on większy, niż chcesz, w zależności od tego, co próbujesz osiągnąć. – FluffulousChimp
dzięki Luke, jak mogę "zniszczyć" UIAlertView, jeśli chcę, aby zniknął. Czy można mieć 0 przycisków? – mica