UITableView Animation в ячейке приводит к нарушению плавной прокрутки - PullRequest
1 голос
/ 30 июля 2011

У меня есть UITableView с пользовательскими UITableViewCells.Каждая ячейка асинхронно загружает изображение и отображает его, все это прекрасно работает, и табличное представление прекрасно прокручивается.

Теперь я добавил анимацию «затухания» к изображениям ячейки, но это нарушает прокрутку таблиц.Когда я щелкаю, как только изображение хочет «исчезнуть», анимация прокрутки табличного представления останавливается.Как будто недавно появившееся «fade in» на изображениях клеток прерывает анимацию прокрутки.

Есть ли способ обойти это?это обычное поведение, или мне удалось сделать что-то действительно странное?

Вот функция обратного вызова, которая вызывается после асинхронной загрузки изображения (функция анимации).

-(void)imageReady:(UIImage *)image FromUrl:(NSString *)url
{
    [UIView animateWithDuration:0.3 animations:^
    {
        [self.imageThumbnail setImage:image];
        self.imageThumbnail.alpha = 1;
    }]; 

}

Я установил альфа на 0 на более ранней стадии.

Вся помощь приветствуется.

Ответы [ 2 ]

5 голосов
/ 07 августа 2011

В моем случае все, что ему нужно, это опция «UIViewAnimationOptionAllowUserInteraction» в вызове animateWithDuration.

[UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) animations:^
        {
            self.imageThumbnail.alpha = 1;
        } completion:nil];
1 голос
/ 30 июля 2011

Поскольку UITableView происходит от UIScrollView, я бы реализовал методы UIScrollViewDelegate, -scrollViewDidScroll: и -scrollViewDidEndDecelerating:.Кроме того, я бы добавил BOOL для вашего класса, что-то вроде shouldPerformAnimations.

Сейчас в -scrollViewDidScroll, установите shouldPerformAnimations в NO.В качестве альтернативы установите его на YES в -scrollViewDidEndDecelerating:

Теперь все, что вам нужно сделать, это проверить на shouldPerformAnimations перед выполнением анимации в imageReady:fromURL:.Идея состоит в том, что, если ячейки прокручиваются, бессмысленно выполнять анимацию, которую пользователь никогда не увидит.Таким образом, делая это, мы просто ждем, пока табличное представление не перестанет прокручиваться, и затем мы выполняем анимацию на всех видимых ячейках.Вы можете получить массив путей индекса для видимых ячеек с помощью метода -indexPathForVisibleRows в UITableView.

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