Как поймать конец анимации в deleteRowsAtIndexPaths
Мне было интересно, есть ли какая-нибудь возможность поймать, если анимация, запущенная во время удаленияResRasAtIndexPaths, закончилась? Я пытаюсь удалить несколько строк из UITableView, кроме одного, который я использовал. Затем я хочу вставить несколько строк в один и тот же UITableView. Обе операции выполняются при разделении блоков beginUpadate/endUpdate. Проблема в том, что перед удалением конца анимации начинается анимация вставки, и я хочу, чтобы она запускалась одна за другой, потому что вставленные строки поступают из внешнего веб-сервиса.
Я думал об обертке вставки и удаления методов (в подклассе UITableView) в методах, где я мог бы заменить стандартную анимацию на пользовательские, и использовать блоки objective-c, чтобы стрелять один за другим, когда первый заканчивается, но кажется, что это невозможно или Я просто не могу этого сделать.
Заранее благодарим за помощь!
Ответы
Ответ 1
Я считаю, что обработка обновления таблицы в animateWithDuration
будет работать:
[UIView animateWithDuration:0.0 animations:^{
[coursesTable beginUpdates];
…
[coursesTable endUpdates];
} completion:^(BOOL finished) {
// Code to run when table updates are complete.
}];
Другие методы, которые я нашел здесь, на Stack Overflow, не работали для меня.
Я использовал эту технику за один раз и протестировал ее достаточно, чтобы убедиться, что блок завершения был вызван после того, как я вызвал метод endUpdates таблицы, и время, когда оно было вызвано, казалось разумным, но я переписал свой код, чтобы мне не понадобилось это уже не было, прежде чем я полностью подтвердил, что анимация была фактически закончена.
Ответ 2
используйте CATransaction
, чтобы поймать завершение анимации
CATransaction.begin()
CATransaction.setCompletionBlock({
// completion
})
// do your animation here
CATransaction.commit()
Ответ 3
От iOS 11 и выше:
[tblProducts performBatchUpdates:^{
[self->tblProducts deleteRowsAtIndexPaths:@[self.animDeleteIndex] withRowAnimation:UITableViewRowAnimationFade];
} completion:^(BOOL finished) {
[self->tblProducts reloadData];
}];