2

我想用动画重新加载集合。我浏览了文档,他们提供了以下方法。我用过。它工作正常。现在我想处理动画的速度(慢/快)。通过这种方法可以吗?

  - (void)performBatchUpdates:(void (^)(void))updates completion:(void (^)(BOOL finished))completion;

我的代码:

[mycollectionView performBatchUpdates:^{
    [mycollectionView reloadData];
   };
4

3 回答 3

2

为单元格添加移动效果和动画:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {

    CGFloat xx=cell.frame.origin.x;
         CGFloat yy=cell.frame.origin.y;



        CGRect frame = cell.frame;
        frame.origin.x = 500; // new x coordinate
        frame.origin.y = 0; // new y coordinate
        cell.frame = frame;


        [UIView animateWithDuration:2.0 animations:^{

            CGRect frame = cell.frame;
            frame.origin.x = xx; // new x coordinate
            frame.origin.y = yy; // new y coordinate
            cell.frame = frame;
            // cell.entityImageEffect.alpha = 1;
        }];

    return cell;

    }
于 2013-07-30T10:40:39.710 回答
1

我不确定,但我认为通过简单地调用来实现是不可能的performBatchUpdates:,我认为覆盖它是没有意义的。

但是这样做的简单技巧是使单元格透明,然后调用 UIViewanimateWithDuration:animations:collectionView:cellForItemAtIndexPath:

例如:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SMSourceEntityCell";
    SMSourceEntityCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.backgroundImageView.alpha = 0.1;
    cell.entityImageView.alpha = 0.1;
    cell.entityImageEffect.alpha = 0.1;

    [UIView animateWithDuration:2.0 animations:^{
        cell.backgroundImageView.alpha = 1;
        cell.entityImageView.alpha = 1;
        cell.entityImageEffect.alpha = 1;
    }];

    return cell;
}
于 2013-07-23T13:43:09.240 回答
0

唷。我有点晚了,但是如果您正在缓存单元格的内容,您可以为尚未缓存的项目设置动画,并让缓存的单元格按原样显示。这样,您就不会为重复使用的单元格重复单元格动画。

于 2015-02-17T12:19:08.713 回答