TTThumbsViewController visualizza le immagini durante lo scorrimento
-
27-10-2019 - |
Domanda
Sto estendendo TTThumbsViewController
per visualizzare foto da una fonte esterna. Tutto funziona bene ma vorrei cambiare un comportamento del controller: vorrei visualizzare / caricare le immagini in TTThumbsViewController
mentre l'utente sta ancora scorrendo e non solo quando l'utente finisce di scorrere.
Ho visto che in TTTableViewDelegate.m
le richieste vengono sospese all'avvio dello scorrimento e ho provato a impostarlo su no NO ma sembra solo recuperare le immagini e non visualizzarle effettivamente al termine del caricamento.
//TTTableViewDelegate.m
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[TTURLRequestQueue mainQueue].suspended = YES;
...
}
Inoltre mi sono agganciato all'inizio e alla fine del trascinamento delle chiamate dei delegati per provare ad aggiornare la vista ogni secondo circa con la speranza di visualizzare le miniature, ho provato a chiamare invalidateView
, reload
e un altro paio sul thread principale ma nessuno sembrava funzionare (invalidateModel
non si adatta ai miei scopi qui).
Qualcuno potrebbe indicarmi la giusta direzione?
Grazie in anticipo
Modifica1 : c'è un caricatore nella barra di stato se scorro quando uso [TTURLRequestQueue mainQueue].suspended = NO;
ma in realtà non recupera le immagini, confermato con wirehark.
Modifica2 : dopo un po 'più di debug ho scoperto che la richiesta viene inviata in modo programmatico ma la risposta viene ricevuta solo dopo aver terminato lo scorrimento, quindi sembra che i metodi delegati asincroni di NSURLConnection
non si attivino mentre un scrollView
viene fatto scorrere, ma sono riuscito a eseguire codice simile (funzionante) in un altro controller di visualizzazione con un tableView senza utilizzare tre20 lib.
Soluzione
Dopo aver cercato su Google numerosi thread e forum, ho finalmente ottenuto il comportamento che volevo, anche se ho cambiato il codice three20 invece di estenderlo in una parte: nel mio thumbsViewController
ho implementato il seguente delegato che consente di effettuare richieste durante lo scorrimento:
-(void)didBeginDragging {
[super didBeginDragging];
[TTURLRequestQueue mainQueue].suspended = NO;
}
Ora per risolvere il problema delle connessioni non elaborate durante lo scorrimento ho trovato NSURLRequest non si attiva durante lo scorrimento di UIScrollView utile e in TTRequestLoader.m ho modificato quanto segue:
//TTRequestLoader.m
- (void)connectToURL:(NSURL*)URL {
...
//To allow requests while scrolling we must schedule the conenction in other run loop
//_connection = [[NSURLConnection alloc] initWithRequest:URLRequest delegate:self];
//code above was replaced by the one below
_connection = [[NSURLConnection alloc] initWithRequest:URLRequest delegate:self startImmediately:NO];
[_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[_connection start];
}