我想创建一个效果,以便我的collectionviewcell(其中有一个imageview作为IBOutlet)将以随机延迟加载其图像。因此,例如,单元格#1将在2秒内显示其图像,而#2将花费1秒钟,单元格#3将花费4秒......等等。
我该怎么做?我听说过在cellForRowAtIndexPath上使用NSOperationQueue但不知道如何实现。
答案 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:
,单元格本身会处理其余部分。