UICollectionView:animation自定义布局
我在UICollectionView中显示大量的图像单元格。 用一个button,我希望能够把我的所有细胞分组在第一个。
这是行之有效的,但是当我试图添加一个animation转换到我的重组行动,没有任何反应。
这里我使用自定义布局的方法:
- (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]; }
任何想法 ? 谢谢 !
animation将不会从您调用的方法中起作用。
要将布局和animation更改为新布局,最简单的方法是在集合视图上调用performBatchUpdates
,每个块参数都为nil
。 这使您的布局无效,并为您的新animation制作animation。
在这之前,你会告诉布局对象你想要新的布局发生。 另外,在layoutAttributesForElementsInRect
里面,只需检查你的布尔variables,然后像现在这样做,把分组的帧(可能中心会更好)应用于所有的属性,但是没有animation。 您还需要在layoutAttributesForElementAtIndexPath
重现此代码。
总之:
- 从中删除您的无效布局调用
- 从他们所在的位置删除animation调用,只需修改布局属性即可
- 添加..forElementAtIndexPath代码
- 在您的视图控制器中,调用布局对象的重组方法,然后调用集合视图上的performBatchupdates。