iOS:UICollectionViewCell 动画部分更改单元格内容

Posted

技术标签:

【中文标题】iOS:UICollectionViewCell 动画部分更改单元格内容【英文标题】:iOS: UICollectionViewCell animation change cells content partially 【发布时间】:2013-07-17 00:55:35 【问题描述】:

我有带有单元格的 UICollectionView。我需要更改 UIImageView 中的单元格图像。但是我需要改变它不是在一个单元格中,而是从一个单元格更改为 30,例如。 (需要更改值的单元格是更改。) 我想用动画来做这个。另外,我不想同时更改所有必须更改的单元格。我想先改变一些,在短时间内改变更多等等,直到一切都改变。是否可以?有什么我可以做到这一点的例子吗?

我已经制定了一种可以一次性改变的方法,但这不是我想要的。如果有人想查看此代码,我会在更新后将其发布在这里,目前我没有理由发布它(因为我认为这是一种完全不同的方式,显示同时更改和部分更改)。

【问题讨论】:

我认为没有任何自动方法可以做到这一点。您可能必须设置一个 NSTimer,并在每次触发时调用一个动画(或一组动画)。 【参考方案1】:

一点也不难,实际上,这完全取决于您如何加载单元格。例如,我刚刚做了一个简单的 hack:

AnimatedCell.m

UICollectionViewCell 子类

- (void)setImage:(UIImage*)image animatedWithDelay:(NSTimeInterval)delay

    self.imageView.image = image;
    
    // Apply the change immediately
    if (delay < 0.01)
    
        return;
    
    
    self.imageView.alpha = 0.0;
    
    [UIView animateWithDuration:0.5 delay:delay options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseInOut animations:^
        self.imageView.alpha = 1.0;
     completion:nil];

这是一个使用 UIView 方便的动画方法的简单淡入,以后你可能想要更花哨的东西!无论如何,现在,我们需要设置内容并计算适当的延迟。

ViewController.m

符合 UICollectionViewDataSource 和 UICollectionViewDelegate

@interface ViewController () <UICollectionViewDataSource, UICollectionViewDelegate>

@property (nonatomic,assign) CGFloat delay;

@end

@implementation ViewController

CGFloat const kDelayMinimum   = 0.02;
CGFloat const kDelayIncrement = 0.01;

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

    AnimatedCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collection.cell" forIndexPath:indexPath];
    
    [cell setImage:[UIImage imageNamed:@"photo.png"] animatedWithDelay:self.delay];
    
    self.delay += kDelayIncrement;
    
    return cell;


- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

    self.delay = kDelayMinimum;


// <Rest of the code>

@end

这确实是一个简单的技巧,我只是增加每个正在呈现的单元格的延迟,然后,当用户滚动时,延迟被重置为最小,否则,延迟会增长并失控。

您需要弄清楚如何将其正确插入数据源,处理图像未加载的情况等,但将此作为工作的基础。

【讨论】:

我对@9​​87654323@ 有一点点不懂。当我们拖动滚动视图时会发生什么?延迟计数器将是最小的,结果是什么?

以上是关于iOS:UICollectionViewCell 动画部分更改单元格内容的主要内容,如果未能解决你的问题,请参考以下文章

iOS中UIcollectionviewCell的动态宽度?

iOS 子类 UICollectionViewCell 自定义 init 方法

iOS swift UICollectionviewcell 快照错误

iOS:如何更改 UICollectionViewCell 的方向?

iOS9下UICollectionViewCell的awakeFromNib问题

IOS7 风格模糊 UICollectionViewCell 视图点击