UITableView, как поймать конец анимации? - PullRequest
3 голосов
/ 04 марта 2010

У меня есть UITableView с большим количеством строк. Это как аккордеон: http://docs.jquery.com/UI/Accordion Основные ячейки имеют подэлементы, подэлементы имеют также подэлементы. Так что это три уровня tableView.

Хорошо, когда пользователь выбирает ячейку, он расширяет (или сворачивает) ячейки с анимацией строки. Но мне нужно установить новый размер tableView и scrollView.

Я делаю все это в этом методе:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

Проблема: Когда пользователь касается ячейки, а затем быстро нажимает на вспомогательную, вторая анимация не выполняется, поэтому подэлементы уровня 2 не отображаются. Но размер был установлен (принимая во внимание, что субэлементы уровня 2 были показаны).

На самом деле я играю со временем, чтобы справиться с этим ... но это действительно отстой.

Вот пример моего кода:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// Checking with times (with 0,5 second interval in order to be sure that the previous animation is finished !)

// Setting tableView & scollView heights

[tableView beginUpdates];
if(position.isExpanded == YES)
    [tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationBottom];
else 
    [tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop];
[tableView endUpdates];
}

Итак, я хотел бы поймать конец этой анимации. Или, играя с неким семафором (но у меня всего 1 процесс ...) Есть идеи, чтобы это исправить?

Пожалуйста, помните в своих ответах, что я действительно новичок в разработке для iPhone.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 марта 2013

Дополнительно:

Вы можете получить анимацию, проверив NSArray *animationKeys = [cell.layer animationKeys]; и позвонив CAAnimation *animation = [cell.layer animationForKey:_a_key_];.После этого вы можете установить делегата и поймать завершение, как описано выше.

0 голосов
/ 05 марта 2010

Анимация управляется экземпляром класса CAAnimation. Этот класс поддерживает метод - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag, который будет доставлен делегату этого экземпляра. Эта информация обычно используется для получения информации о завершении.

Что касается вашего специального запроса, я бы посмотрел ссылку на класс UIView. Есть несколько задач, которые имеют дело с анимацией этого представления - базовый класс UITableView. Поэтому все, что действительно для UIView, должно влиять на представление таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...