2015-11-06 1 views
7

Ho implementato Force Touch nella mia app nella vista chat. Quando un utente forza-tocca il fumetto del messaggio chat dell'altro utente, viene presentato il suo profilo. Per qualche strana ragione, quando la bolla del messaggio viene delicatamente premuta, la transizione interattiva rimane bloccata e tutto ciò che è visibile è uno screenshot della vista che dovrebbe essere eliminato gradualmente.L'animazione forzata al tocco si blocca se viene toccata delicatamente

Ho eseguito il debug di questo problema anche utilizzando il View Hierarchy Debugger e il UITransitionView è sicuramente la vista più in alto. L'app non si arresta in modo anomalo: è ancora in esecuzione e l'utente può ancora ricevere messaggi ma non visualizzarli, uscire dallo schermo, ecc. A causa dello screenshot bloccato sopra.

Qualcuno ha mai avuto problemi come questo? Sembra un bug di Apple.

+0

Forse potresti condividere del codice. Stai usando l'API peek/pop di Apple? – beyowulf

+0

Ciao @beyowulf. Proverò a duplicare il problema con un progetto di esempio e pubblicarlo qui. Sì, sto usando l'API peek/pop. –

+0

Si prega di visualizzare il progetto di esempio sul mio Github: https://github.com/JinkProject/PeekPopBug –

risposta

0

Ho trovato un motivo per questo errore.

Se il controller della vista devono sostenere anteprima per forza di contatto, è necessario registrare questo controller di vista con delega chiamando

- (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate 
    sourceView:(UIView *)sourceView NS_AVAILABLE_IOS(9_0); 

metodo per fare questo.

Ho appena chiamo all'improvviso questa funzione due volte (una volta in classe super viewDidLoad(), una volta nel controllo visualizzazione secondaria di), e quando rimuovo una volta nel mio controller visualizzazione secondaria, questo bug è stato risolto! Incredibile ...

È ancora un bug di Apple perché non ha senso per quello che succede. Tuttavia, desidero che questa risposta possa aiutare gli sviluppatori che hanno lo stesso problema con me.

FYI. Ho solo sfogliato il tuo codice Github, non ho trovato nessuna doppia chiamata per il metodo di registrazione. Forse c'è un'altra ragione per questo bug. Potresti provare a rimuovere il metodo di registrazione nella sottoclasse di UITableViewController. A proposito, riproduco questo problema quando un controller di visualizzazione utilizza ComponentKit.