故意在UICollectionView单元内加载带有随机延迟的imageview

时间:2014-12-19 21:17:50

标签: ios uiimageview uicollectionviewcell

我想创建一个效果,以便我的collectionviewcell(其中有一个imageview作为IBOutlet)将以随机延迟加载其图像。因此,例如,单元格#1将在2秒内显示其图像,而#2将花费1秒钟,单元格#3将花费4秒......等等。

我该怎么做?我听说过在cellForRowAtIndexPath上使用NSOperationQueue但不知道如何实现。

2 个答案:

答案 0 :(得分:1)

如果您的图片已经可用,您可以尝试在您的cellForItemAtIndexPath方法中随机延迟:

UIImage *theImage = ...; //get your image
int maxDelay = 4;
int delayInSeconds = arc4random() % maxDelay;
cell.imageView.image = theImage;
cell.imageView.alpha = 0;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      cell.imageView.alpha = 1;
});

如果您的图像在内存中不可用,并且需要加载,您可能需要查看this post如何异步加载图像:

答案 1 :(得分:0)

您可以在单元格的子类上设置一个方法来设置图像,然后在该方法中调用另一个具有随机延迟的方法来实际设置UIImageView's图像。像这样:

- (void)delayedSetBackgroundImage:(UIImage *)image
{
    [self performSelector:@selector(setBackgroundImage:) withObject:image afterDelay:(arc4random() % 5)];
}

- (void)setBackgroundImage:(UIImage *)image
{
    _myImageView.image = image;
}

那么在cellForRowAtIndexPath中你可以调用delayedSetBackgroundImage:,单元格本身会处理其余部分。