如何实现 UICollectionViewCell 翻转并增长以在点击时显示模态视图的动画?
问问题
7291 次
2 回答
7
这是我在另一个项目中使用的,它运行良好:
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
if (cell.selected) {
[collectionView deselectItemAtIndexPath:indexPath animated:YES];
[UIView transitionWithView:cell
duration:0.2
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
[cell setFrame:self.selectedCellDefaultFrame];
cell.transform = self.selectedCellDefaultTransform;
}
completion:^(BOOL finished) {
self.selectedCellDefaultFrame = CGRectZero;
[collectionView reloadItemsAtIndexPaths:@[indexPath]];
}];
return NO;
}
else {
return YES;
}
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
[cell.superview bringSubviewToFront:cell];
self.selectedCellDefaultFrame = cell.frame;
self.selectedCellDefaultTransform = cell.transform;
[UIView transitionWithView:cell
duration:0.2
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{
[cell setFrame:collectionView.bounds];
cell.transform = CGAffineTransformMakeRotation(0.0);
}
completion:^(BOOL finished) {}];
}
这里有不同的东西:
bringSubviewToFront:
消息调用用于防止单元格在其他单元格后面进行动画处理- 我们使用控制器中声明的两个属性:
selectedCellDefaultFrame
和selectedCellDefaultTransform
保存单元格的默认状态并在取消选择时重新初始化它 - 取消选择时,我们调用 的
reloadItemsAtIndexPaths:
方法UICollectionView
来确保位置的重置完全完成
如果您对此有任何问题,请告诉我。
祝你好运,
于 2013-07-09T02:01:33.477 回答
4
我没有尝试过成长动画,但我想我可以帮助 UICollectionViewCell 翻转动画。
尝试:
UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
[UIView animateWithDuration:1.0
delay:0
options:(UIViewAnimationOptionAllowUserInteraction)
animations:^
{
NSLog(@"starting animation");
[UIView transitionFromView:cell.contentView
toView:newView
duration:.5
options:UIViewAnimationOptionTransitionFlipFromRight
completion:nil];
}
completion:^(BOOL finished)
{
NSLog(@"animation end");
}
];
希望有帮助!
于 2012-12-16T20:34:39.650 回答