gpt4 book ai didi

ios - 为 UICollectionView 中的所有 UICollectionViewCell 设置动画

转载 作者:可可西里 更新时间:2023-11-01 04:53:51 27 4
gpt4 key购买 nike

我想知道为 UICollectionView 中的所有单元格设置动画的好方法是什么。我正在尝试在 UICollectionView 中模拟编辑。所以我想要做的是缩小 UICollectionViewCells 的所有边界。所以我所拥有的是:

- (IBAction)startEditingMode:(id)sender {
[_items enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];

[UIView animateWithDuration:0.25 animations:^{
cell.layer.transform = CATransform3DMakeScale(0.9, 0.9, 1);
}];
}];
}

它有效,但我不确定 UICollectionView 上是否有一个属性,或者是否有更好更标准的方法来做这样的事情。谢谢。

最佳答案

我会创建一个 UICollectionViewLayout 子类。添加一个名为 editing 的 BOOL 属性。编辑更改时,调用 invalidateLayout。然后在 -layoutAttributesForItemAtIndexPath: 方法返回的属性中,您可以指定一个转换。

您的方法的问题在于它仅影响可见单元格。 UICollectionViewLayout 子类很好,因为即使添加了新单元格,它也会将转换应用于所有单元格。并将所有 Collection View 布局处理移出 View Controller 。

单元格属性可以包括框架、大小、中心、变换 (3D)、alpha 和您自己的自定义属性。

您将按照 wL_ 的建议更改 -performBatchUpdates: block 中编辑的值。

- (IBAction)startEditingMode:(id)sender {
[self.collectionView performBatchUpdates:^{
((MyCollectionViewLayout *)self.collectionView.collectionViewLayout).editing = YES;
}
completion:NULL];
}

在 UICollectionViewLayout 子类中:

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];

if (self.editing) {
attributes.transform = CGAffineTransformMakeScale(0.9, 0.9);
}
else {
attributes.transform = CGAffineTransformIdentity;
}

return attributes;
}

另请注意,您(可能)在这里不需要 3D 转换。仿射变换就足够了。

关于ios - 为 UICollectionView 中的所有 UICollectionViewCell 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690873/

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