2

有一种方法可以自定义通过 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 的子视图。

4

4 回答 4

5

有一种方法可以自定义 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找到示例的完整源代码

于 2017-01-21T07:29:27.387 回答
2

是的,您可以更改此动画的持续时间。更改layer.speed您的UICollectionView.

于 2014-10-23T10:10:06.383 回答
1

只需将其包含在 -[UIView animateWithDuration:animations:] 块中,并带有您想要的动画。这可能不是正确的方法,但它似乎适用于 iOS 8。

于 2015-04-09T23:09:39.117 回答
0

不,没有办法自定义由 performBatchUpdates 引起的动画时间。看起来您正在尝试仅在 Cell 上制作动画,特别是在您的 collectionview 中。为什么不直接使用 + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations 来代替?

于 2013-08-09T23:04:02.277 回答