2012-01-09 8 views
7

Я вношу изменения в tableView с использованием блока beginUpdates/endUpdates. На протяжении всего пути мне нужно обновить тень, чтобы она отражала текущую композицию tableView.UITableView beginUpdates/endUpdates callback

Я пробовал настроить KVO для tableView's contentSize, но он называется только endUpdates, как только анимация закончилась. Я хочу, чтобы он вызывался каждый раз, когда изменения contentSize (даже если это только пиксель). Есть ли способ достичь этого?

ответ

0

Извините, что я не думаю, что вы можете это сделать. Когда вы вносите изменения в таблицу после того, как beginUpdates был назван, эти изменения анимируются как одна анимация после endUpdates. Во время этих анимаций нет обратных вызовов анимации. Я не пробовал это, поэтому не знаю, будет ли это хорошо работать для этого, но вы можете попробовать вложить beginUpdates и endUpdates и обновлять свою тень после каждого endUpdates.

+2

Просто FYI: Вызовы beginUpdates и endUpdates могут быть вложенными. Если вы не совершаете вызовы вставки, удаления и выбора внутри этого блока, атрибуты таблицы, такие как количество строк, могут стать недействительными. –

+0

Есть ли у вас пример использования вложенных вызовов? – Rivera

24

Что относительно этого?

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    // animation has finished 
}]; 

[tableView beginUpdates]; 
// do some work 
[tableView endUpdates]; 

[CATransaction commit]; 
+0

, который сделал это для меня! благодаря! – horseshoe7

+1

ничего себе! что почти работает, но есть задержка между представлением таблицы, заканчивающимся обновлениями и запуском блока завершения. Пока я буду использовать это. Благодарю. – SpaceDog

1

Метод Рудольфа не работает для меня так гладко, как ожидалось. В моем случае я выбирал строку на UITableView, используя этот метод, и метод Рудольфа заставлял таблицу делать две анимации с небольшим замораживанием: анимация внутри beginUpdates/endUpdates, небольшая заморозка и анимация в блоке завершения.

[tableView selectRowAtIndexPath:indexPath 
         animated:YES 
        scrollPosition:scrollPosition]; 

, которая вдохновила меня создать этот код ... и это работает плавно:

[UIView animateWithDuration:0.0 animations:^{ 
    [tableView beginUpdates]; 
    // do something to the table 
    [tableView endUpdates]; 
} completion:^(BOOL finished) { 
    // Code to run when table updates are complete. 
}];