Pergunta

Estou estendendo TTThumbsViewController para exibir fotos de fontes externas. Tudo funciona bem, mas gostaria de alterar um comportamento do controlador: gostaria de exibir / carregar imagens em TTThumbsViewController enquanto o usuário ainda está rolando e não apenas quando o usuário termina de rolar.

Eu vi que em TTTableViewDelegate.m as solicitações estão sendo suspensas quando a rolagem começa e eu tentei definir não NÃO, mas parece que apenas busca as imagens e não as exibe quando terminam de carregar.

//TTTableViewDelegate.m
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  [TTURLRequestQueue mainQueue].suspended = YES;
  ...
}

Além disso, enganchei no início e no fim arrastando chamadas de delegado para tentar atualizar a visualização a cada segundo ou assim com a esperança de exibir as miniaturas, tentei chamar invalidateView, reload e mais alguns no thread principal, mas nenhum pareceu funcionar (invalidateModel não atende aos meus objetivos aqui).

Alguém poderia me indicar a direção certa?

Agradecemos antecipadamente

Edit1 : há um carregador na barra de status se eu rolar quando uso [TTURLRequestQueue mainQueue].suspended = NO;, mas ele não busca as imagens, confirmado com wirehark.

Edit2 : depois de um pouco mais de depuração, descobri que a solicitação é enviada programaticamente, mas a resposta só é recebida após terminarmos de rolar, então parece que os métodos delegados assíncronos de NSURLConnection não estão disparando enquanto um scrollView está sendo rolado, mas eu consegui fazer um código semelhante (funcionando) em outro controlador de visualização com um tableView sem usar three20 lib.

Foi útil?

Solução

Depois de pesquisar vários tópicos e fóruns no Google, finalmente consegui o comportamento que queria, embora tenha alterado o código do three20 em vez de estendê-lo em uma parte: em meu thumbsViewController, implementei o seguinte delegado permitindo que as solicitações sejam feitas durante a rolagem:

-(void)didBeginDragging {
    [super didBeginDragging];
    [TTURLRequestQueue mainQueue].suspended = NO;
}

Agora, para resolver o problema das conexões não serem processadas durante a rolagem, encontrei NSURLRequest não dispara enquanto UIScrollView está rolando útil e em TTRequestLoader.m eu mudei o seguinte:

//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];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top