Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将(动画)UICollectionView单元格移入和移出圆形[PICS]_Iphone_Ios_Uicollectionview_Uicollectionviewcell_Uicollectionviewlayout - Fatal编程技术网

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

Iphone 如何将(动画)UICollectionView单元格移入和移出圆形[PICS],iphone,ios,uicollectionview,uicollectionviewcell,uicollectionviewlayout,Iphone,Ios,Uicollectionview,Uicollectionviewcell,Uicollectionviewlayout,我使用自定义布局来定位UICollectionViewCells,如下所示: 这很有效。现在,当我按下左下角的按钮时,我想让所有的单元格动画地返回到视图的中心,如下所示: 我有点让它工作,但它根本没有动画。它只是有点像那样砰砰作响。以下是我用于重新加载操作的代码: - (IBAction)animate:(id)sender { [self.collectionView performBatchUpdates:^{ [self.collectionView reloadSection

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

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

我有点让它工作,但它根本没有动画。它只是有点像那样砰砰作响。以下是我用于重新加载操作的代码:

- (IBAction)animate:(id)sender {
[self.collectionView performBatchUpdates:^{
    [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
} completion:nil];
}
在我的layout类中,每次调用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;
}
[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;
   }
}];

如何设置单元格移动回视图中心的动画?

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

- (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;
}
[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;
   }
}];

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

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

谢谢你的回答,但是不要掷骰子。还是没有动画片。