UICollectionView:动画自定义布局(UICollectionView : animat

2019-07-01 14:14发布

我在UICollectionView显示大量图像的细胞。 随着一个按钮,我想能组我所有的细胞在第一个。

这是运作良好,但是当我试图动画过渡添加到我的重新组合动作,没有任何反应。

在这里,我的方法在自定义布局中使用:

- (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray* allAttributesInRect = [super layoutAttributesForElementsInRect:rect];

    if([allAttributesInRect count] > 0 && _isRegroup)
    {
        UICollectionViewLayoutAttributes *firstAttribute = [allAttributesInRect objectAtIndex:0];
        CGRect frame = firstAttribute.frame;

        for(UICollectionViewLayoutAttributes *attribute in allAttributesInRect)
            [UIView animateWithDuration:0.3f animations:^{attribute.frame = frame;}];
    }
    return allAttributesInRect;
}

- (void)regroupCells:(BOOL)isRegroup // This method is called from my collection controller when my button is pressed
{
    _isRegroup = isRegroup;
    [self invalidateLayout];
}

任何的想法 ? 谢谢 !

Answer 1:

动画将不会从您致电他们的方法中工作。

要改变布局和动画到一个新的,最简单的方法是调用performBatchUpdates在您的收藏观点,与nil每个块的参数。 这种无效的布局和动画到新一个给你。

在此之前,你会告诉你希望发生新的布局的布局对象。 此外,里面layoutAttributesForElementsInRect ,只需检查您的布尔变量和分组帧应用(可能是中心会更好),以所有属性,你现在正在做,但没有动画。 您还需要复制该代码layoutAttributesForElementAtIndexPath

因此,在总结:

  1. 删除您的布局无效电话从它在哪里
  2. 卸下他们在哪里动画调用,只需修改布局属性
  3. 添加..forElementAtIndexPath代码以及
  4. 在您的视图控制器,调用布局对象上重新组合的方法,然后调用集合视图performBatchupdates。


文章来源: UICollectionView : animation custom layout