Время анимации UICollectionViewCell PerformBatchUpdates

Есть ли способ настроить время анимации, выполненной с помощью PerformBatchUpdates?

у меня есть этот код

[self.stepCollectionView performBatchUpdates:^{
    self.stepSelectedIndex = indexPath.row;

    UICollectionViewCell *cell = [self.stepCollectionView cellForItemAtIndexPath:indexPath];

    [UIView transitionWithView:cell
                      duration:0.5f
                       options: UIViewAnimationOptionLayoutSubviews | UIViewAnimationOptionBeginFromCurrentState
                    animations:^{
                        CGRect frame = cell.frame;
                        frame.size.height = 416;
                        cell.frame = frame;
                    }
                    completion:^(BOOL finished) {
                    }];
    } completion:^(BOOL finished) {        
}];

Я бы изменил высоту UICollectionViewCell и в то же время реорганизовал подпредставления UICollectionViewCell.


person Luca Bartoletti    schedule 30.05.2013    source источник
comment
См. stackoverflow.com/questions/12922780/   -  person James Parker    schedule 16.07.2013


Ответы (4)


Существует способ настроить продолжительность и функцию синхронизации для пакетного обновления UICollectionView. Попробуйте приведенный ниже код. А вот как это выглядит https://youtu.be/R0VdC4dliPI

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

[CATransaction begin];
[CATransaction setAnimationDuration:0.3];

[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithControlPoints:0 :1.8 :0 :1]];

[self.menuCollectionView performBatchUpdates:^{
    [self.menuCollectionView insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
    [animatableMenuItems insertObject:@"" atIndex:index];
} completion:^(BOOL finished) {

}];

[CATransaction commit];
[UIView commitAnimations];

Полный исходный код примера можно найти по адресу https://github.com/DoddaSrinivasan/MultiRowUITabBar.

person Srinivasan    schedule 21.01.2017
comment
Это выглядит фантастически, хороший кусок кода. Я поиграл с этим, и если (как и я) вы хотите изменить только продолжительность анимации или плавность кривых, вы можете пропустить код CATransaction и просто использовать разделы UIView в начале и в конце. - person Brett; 21.06.2017

Да, вы можете изменить продолжительность этой анимации. Измените свойство layer.speed вашего UICollectionView.

person Colas    schedule 23.10.2014
comment
Это должно быть layer.speed - обсуждается здесь: stackoverflow.com/a/18196592/404525 - person Estel; 13.05.2015

Просто заверните его в блок -[UIView animateWithDuration:animations:] с желаемой анимацией. Вероятно, это неправильный способ сделать это, но, похоже, он отлично работает для меня с iOS 8.

person Dave Batton    schedule 09.04.2015

Нет, нельзя настроить время анимации, вызванное PerformBatchUpdates. Похоже, вы пытаетесь анимировать только Cell, в частности, в своем представлении коллекции. Почему бы просто не использовать + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations вместо этого?

person Carlos Guzman    schedule 09.08.2013