如何将(移动的)UICollectionView单元格移入和移出圆形[PICS]

时间:2013-07-31 20:27:45

标签: iphone ios uicollectionview uicollectionviewcell uicollectionviewlayout

我正在使用自定义布局来定位我的UICollectionViewCells,如下所示:

enter image description here

这很有效。现在,当我按下左下角的按钮时,我想让所有的单元格生动地返回到视图的中心,如下所示:

enter image description here

我有点工作,但根本没有动画。它只是那种流行音乐。这是我用于重新加载操作的代码:

- (IBAction)animate:(id)sender {
[self.collectionView performBatchUpdates:^{
    [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
} completion:nil];
}

在我的布局类中,我每次调用prepareLayout时都会翻转一个标志,它会调整layoutAttributesForItemAtIndexPath中单元格的中心,如下所示:

- (UICollectionViewLayoutAttributes*) layoutAttributesForItemAtIndexPath:(NSIndexPath *)path {
UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:path];
attributes.size = CGSizeMake(ITEM_SIZEw, ITEM_SIZEh);

if (self.isCircle) {
    attributes.center = CGPointMake(_center.x +_radius *
                                cosf(2 * path.item * M_PI / _cellCount),
                                _center.y + _radius *
                                sinf(2 * path.item * M_PI/ _cellCount));
} else {
    attributes.center = [self collectionView].center;
}

return attributes;
}

如何将单元格的移动动画回到视图的中心?

2 个答案:

答案 0 :(得分:1)

好吧,我找到了答案。制作不同的布局并使用动画切换到它:

[self.collectionView setCollectionViewLayout:home animated:YES];

答案 1 :(得分:0)

尝试将更改放在UIView动画中,如下所示:

[UIView animateWithDuration:0.5 animations:^{
   if (self.isCircle) {
       attributes.center = CGPointMake(_center.x +_radius *
                                cosf(2 * path.item * M_PI / _cellCount),
                                _center.y + _radius *
                                sinf(2 * path.item * M_PI/ _cellCount));
   } else {
       attributes.center = [self collectionView].center;
   }
}];