一点也不难,实际上,这完全取决于您如何加载单元格。例如,我刚刚做了一个简单的 hack:
动画细胞.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 方便的动画方法的简单淡入,你以后可能想要更花哨的东西!无论如何,现在,我们需要设置内容并计算适当的延迟。
视图控制器.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
这真的是一个简单的技巧,我只是增加每个正在呈现的单元格的延迟,然后,当用户滚动时,延迟重置为最小值,否则,延迟会增长并失控。
您需要弄清楚如何将其正确插入数据源,处理图像未加载的情况等,但将此作为工作的基础。