在cellForItemAtIndexPath中更改图像:

时间:2014-01-14 10:23:14

标签: ios uicollectionview

我对此cellForItemAtIndexPath:(NSIndexPath *)indexPath

有疑问
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{           
            NSURL *imageURL = [NSURL URLWithString:[[Listname objectAtIndex:indexPath.item]coverURL]];
            NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
            UIImage *image = [UIImage imageWithData:imageData];

            dispatch_async(dispatch_get_main_queue(), ^{

            shelfcell.bookCover.image = [UIImage imageWithData:imageData];


         });
     });

这一个shelfcell.bookCover.image可以显示图像,但是当我使用

if (_checkversionfromBookPathF == 0.1){ shelfcell.bookCover.alpha = 0.5f;}

else if(_checkversionfromBookPathF == 1) { shelfcell.bookCover.alpha = 1.0f; }

图片仅显示_checkversionfromBookPathF == 1,但会先显示此图片_checkversionfromBookPathF == 0.1,然后_checkversionfromBookPathF == 1

为什么图片不能去shelfcell.bookCover.alpha = 0.5f;请有人解释我。

1 个答案:

答案 0 :(得分:2)

您无法使用'=='直接比较浮点数,请使用<或者>符号不是==。

重用相同的单元格可能存在一些问题。因为您在另一个线程中运行,所以在加载图像之前加载图像需要一些时间,此单元格可能会被重用于另一个执行了shelfcell.bookCover.alpha = 1.0f的indexPath

溶液 - >

NSInteger row=indexPath.row;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{           
            NSURL *imageURL = [NSURL URLWithString:[[Listname objectAtIndex:indexPath.item]coverURL]];
            NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
            UIImage *image = [UIImage imageWithData:imageData];

            dispatch_async(dispatch_get_main_queue(), ^{
              //set image if below condition satisfies
              if([tableView indexPathForCell:cell] . row == row){
                  shelfcell.bookCover.image = [UIImage imageWithData:imageData];
               }
     });