#pragma mark Collection View
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [array count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
NSLog(@"indexpath row : %d", indexPath.row);
UILabel *label = (UILabel *)[cell viewWithTag:100];
NSString *checkisfolder=[checkfolder objectAtIndex:indexPath.row];
NSString *selectorValue=[list2 objectAtIndex:indexPath.row];
NSURL *url = [NSURL URLWithString:[imgarray objectAtIndex:indexPath.row]];
NSLog(@"indexpath image : %@", [imgarray objectAtIndex:indexPath.row]);
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
// load image from JSON URL
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImageView *imgView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 140, 80)] autorelease];
if (imgView != nil) {
NSLog(@"selectorValue1 : %@", selectorValue);
UIImage *img = [[UIImage alloc] initWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
imageButton.frame = CGRectMake(15, 10, 257, 140);
[imageButton setImage:img forState:UIControlStateNormal];
imageButton.tag=[selectorValue intValue];
imageButton.adjustsImageWhenHighlighted = NO;
if([checkisfolder isEqual: @"isfolder"]){
[imageButton addTarget:self action:@selector(imagefolderClicked:) forControlEvents:UIControlEventTouchUpInside];
}else{
[imageButton addTarget:self action:@selector(imageViewClicked:) forControlEvents:UIControlEventTouchUpInside];
}
[cell addSubview:imageButton];
UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(userLongPressed:)];
press.minimumPressDuration = 1.0;
[imageButton addGestureRecognizer:press];
[press release];
});
};
});
label.text = [array objectAtIndex:indexPath.row];
label.lineBreakMode = NSLineBreakByWordWrapping;
label.numberOfLines = 0;
[cell.layer setBorderWidth:1.0f];
[cell.layer setBorderColor:[UIColor whiteColor].CGColor];
[cell.layer setCornerRadius:5.0f];
return cell;
}
圖像再次從服務器加載並使滾動向上或向下非常滯後。以下是發生這種情況的日誌。UICollectionView圖像一次又一次地在滾動中滯後加載
2016-02-15 10:53:55.273 Go Test[2086:651177] indexpath row : 0
2016-02-15 10:53:55.274 Go Test[2086:651177] indexpath image : http://media.movideo.com/media-images-670/media/1358499/320x160.png
2016-02-15 10:53:55.465 Go Test[2086:651298] selectorValue1 : 475
2016-02-15 10:53:55.476 Go Test[2086:651177] indexpath row : 1
2016-02-15 10:53:55.476 Go Test[2086:651177] indexpath image : http://media.movideo.com/media-images-670/media/1358500/320x160.png
2016-02-15 10:53:55.534 Go Test[2086:651284] selectorValue1 : 476
2016-02-15 10:53:55.541 Go Test[2086:651177] indexpath row : 2
2016-02-15 10:53:55.542 Go Test[2086:651177] indexpath image : http://media.movideo.com/media-images-670/media/1358318/320x160.png
2016-02-15 10:53:55.709 Go Test[2086:651283] selectorValue1 : 477
2016-02-15 10:53:55.818 Go Test[2086:651177] there are 0 objects in the array
2016-02-15 10:53:55.819 Go Test[2086:651177] there are 0 objects in the array
如何解決滯後問題?應該只從服務器加載一次圖像並保存在緩存或本地。
我重寫了代碼。更改'[imageButton setImage:img forState:UIControlStateNormal];'到'[imageButton setImageWithURL:url forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@「logo.png」]];'。但我得到這個錯誤***終止應用程序由於未捕獲異常'NSInvalidArgumentException',原因:' - [UIButton setImageWithURL:forState:placeholderImage:]:無法識別的選擇器發送到實例0x155ecf00''。 – raymondkwan