TT Thumbs View Controller exibe imagens enquanto rola
-
27-10-2019 - |
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.
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];
}