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.

È stato utile?

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];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top