2014-12-19 74 views
1

内随机延时我想创建一个效果,这样我collectionviewcell(有一个ImageView的作为IBOutlet中)将其加载图像与随机延迟。因此,例如,小区#1将已在2秒内显示的图像,而#2将于1秒,小区#3需要4数秒等故意加载的ImageView与UICollectionView细胞

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

回答

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如何异步加载图像:

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:和电池本身会采取其他的事情。