gpt4 book ai didi

ios - UICollectionView : animation custom layout

转载 作者:可可西里 更新时间:2023-11-01 03:36:25 29 4
gpt4 key购买 nike

我在 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];
}

有什么想法吗?谢谢!

最佳答案

动画不会在您调用它们的方法中运行。

要更改布局并为新布局设置动画,最简单的方法是在 Collection View 上调用 performBatchUpdates,每个 block 参数使用 nil。这会使您的布局无效并为您设置新的布局。

在执行此操作之前,您需要告诉布局对象您希望新布局发生。此外,在 layoutAttributesForElementsInRect 中,只需检查您的 bool 变量并将分组的框架(可能居中会更好)应用于您现在所做的所有属性,但没有动画。您还需要在 layoutAttributesForElementAtIndexPath 中重现此代码。

所以,总结一下:

  1. 从原处删除无效布局调用
  2. 去掉原来的动画调用,只修改布局属性
  3. 同时添加 ..forElementAtIndexPath 代码
  4. 在您的 View Controller 中,对布局对象调用重组方法,然后对 Collection View 调用 performBatchupdates。

关于ios - UICollectionView : animation custom layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999510/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com