有一种方法可以自定义通过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的子视图。
答案 0 :(得分: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];
找到该示例的完整源代码
答案 1 :(得分:2)
是的,您可以更改此动画的持续时间。
更改layer.speed
的{{1}}属性。
答案 2 :(得分:1)
用你想要的动画将它包装在 - [UIView animateWithDuration:animations:]块中。它可能不是正确的方法,但对于iOS 8来说它似乎工作正常。
答案 3 :(得分:0)
不,没有办法自定义performBatchUpdates引起的动画时间。看起来你正试图在你的集合视图中特别在Cell上制作动画。为什么不直接使用+(void)animateWithDuration:(NSTimeInterval)持续时间动画:( void(^)(void))动画呢?