2011-01-01 15 views
5

A volte, interruzioni quali telefonata verificano e disturbare un comportamento normale di un app in iPhone o iPad.Come catturare cancallation di UIScrollView o di altri?

Ad esempio, ho creato un'istanza UIScrollView e implementato i metodi delegati UIScrollView: scrollViewWillBeginDragging e scrollViewDidEndDragging (e scrollViewDidEndDecelerating).

metodo A scrollViewWillBeginDragging disattivato tutti i pulsanti personalizzati nella mia app. Poi metodi scrollViewDidEndDragging e scrollViewDidEndDecelerating attivati ​​questi pulsanti personalizzati. Cioè, mentre l'utente scorreva, tutti i pulsanti personalizzati sono stati disattivati ​​per un po '.

Il problema era che mentre l'utente ha iniziato a trascinare e appena tenuto un'istanza UIScrollView, se ho preso un screenshot premendo un tasto home e un pulsante di accensione, quindi qualsiasi scrollViewDidEndDragging e scrollViewDidEndDecelerating non è stato chiamato . Così l'app è diventata incasinata su.

Ho implementato un metodo UIApplicationWillResignActiveNotification nel mio UIViewController, ma non è stato richiamato dopo aver acquisito uno screenshot.

Come posso rilevare qualsiasi tipo di interruzione che disturba un flusso regolare di eventi?

A volte, toccaEnd e toccaCanceled non è stato chiamato a causa di un'interruzione.

Grazie.

+0

Che ne dici di implementare viewWillAppear o viewDidAppear e testare se vengono richiamati dopo aver scattato uno screenshot? Quindi in quei metodi se (beingDragged == TRUE) chiama il metodo scrollViewDidEndDragging. – adam

+0

Anche il metodo viewDidScroll viene chiamato anche in caso di interruzioni? probabilmente no e lì hai un approccio alternativo al tuo problema. – nacho4d

+0

Sono nuovo alle cose, quindi non sono sicuro del perché dovresti disabilitare un pulsante quando l'utente stava usando una vista diversa? L'impressione che ho da varie letture è che l'unica volta in cui vorresti disabilitare un pulsante è quando non può effettivamente eseguire la sua funzione perché manca un po 'di dati, cioè nessuna selezione, o un campo non compilato, ecc. . –

risposta

2

Ho affrontato lo stesso problema e sono liberato di esso utilizzando performSelector:withObject:afterDelay metodo NSObject.

In scrollViewDidScroll:

[NSObject cancelPreviousPerformRequestsWithTarget:yourController]; 
[yourController deactivateButtons]; 
[yourController performSelector:@selector(activateButtons) withObject:nil afterDelay:0.5]; 

Si può provare questa tecnica e combinarlo con altri che lei ha citato.
Speranza, che vi aiuterà. In bocca al lupo!