Existe uma maneira de especificar a duração das animações de linha UITableView ou de obter um retorno de chamada quando a animação for concluída?
O que eu gostaria de fazer é piscar os indicadores de rolagem após a conclusão da animação. Fazer o flash antes disso não faz nada. Até agora, a solução que tenho é atrasar meio segundo (que parece ser a duração padrão da animação), ou seja:
[self.tableView insertRowsAtIndexPaths:newRows
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView performSelector:@selector(flashScrollIndicators)
withObject:nil
afterDelay:0.5];
ios
iphone
uitableview
animation
cocoa-touch
Daniel Dickison
fonte
fonte
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
Respostas:
Hoje em dia, se você quiser fazer isso, há uma nova função a partir do iOS 11 :
Em fechamentos de atualizações, você coloca o mesmo código que na seção beginUpdates () / endUpdates. E a conclusão é executada após todas as animações.
fonte
Acabei de encontrar isso. Veja como fazer:
Objective-C
Rápido
fonte
setAnimationDuration
não parece afetar a duração da inserção / exclusão. iOS 6Expandindo a boa resposta de karwag , observe que no iOS 7, cercar a CATransaction com uma animação UIView oferece controle da duração da animação da mesa.
A duração da animação UIView não tem efeito no iOS 6. Talvez as animações de mesa do iOS 7 sejam implementadas de forma diferente, no nível UIView.
fonte
Esse é um truque muito útil! Eu escrevi uma extensão UITableView para evitar escrever coisas CATransaction o tempo todo.
Isso é usado assim:
fonte
setCompletionBlock
iOS 4+Encurtando a boa resposta de Brent , pelo menos para iOS 7 você pode envolver tudo isso concisamente em uma chamada [UIView animateWithDuration: delay: options: animations: Complementation:]:
no entanto, não consigo substituir a curva de animação padrão de qualquer outra coisa que não seja EaseInOut.
fonte
Aqui está uma versão rápida da resposta de Karwag
fonte
Para mim, eu precisava disso para um collectionView. Fiz uma extensão simples para resolver isso:
fonte
Como o
performBatch
método de tableView está disponível a partir do iOS 11 apenas, você pode usar a seguinte extensão:fonte
Você pode tentar envolver o insertRowsAtIndexPath em um
transação, em seguida, faça o flash depois.
fonte