ios - UITableView UIImageView 图像闪烁 - iOS/Objective C

标签 ios objective-c

由于某些原因,当我使用 GCD 下载图像时,图像会随机开始闪烁。

我将重置模拟器中的内容设置,它会工作一次,然后它会再次开始闪烁。

这是我正在使用的代码。我在那里重新加载,因为如果我不重新加载它,图像不会显示,直到我点击单元格。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
    NSURL *url = [NSURL URLWithString:self.entries.arrayimage];
    NSData *imgData = [NSData dataWithContentsOfURL:url];


    dispatch_sync(dispatch_get_main_queue(), ^(void) {
        cell.imageView.image = nil;
        UIImage *img = [UIImage imageWithData:imgData];
        cell.imageView.image = img;
        [self.tableView reloadData];

    });


});
return cell;
[self.tableView reloadData];

最佳答案

那是因为您正在使用 dispatch_async(dispatch_get_global_queue 从文件异步加载 imageData。在 cellForRow 中使用此样式加载图像将使单元格图像应该首先是前一个图像。然后完成异步加载后,会调用dispatch_sync(dispatch_get_main_queue(),加载你想要的图像。因此,无论何时你reloadData或任何其他方法调用cellForRow,单元格图像会闪烁。

我知道您想在不阻塞主线程的情况下加载图像,但这不是一个好方法。

关于ios - UITableView UIImageView 图像闪烁 - iOS/Objective C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164728/

相关文章:

ios - 是否可以为 UIPageViewController 中的页面创建自定义转换?

ios - 表有时加载有时崩溃

ios - 是否可以从 iphone 打开 apple watch 应用程序

objective-c - 从 NSString 获取第一个 32 位(4 字节)数字

ios - swift 数组 : how to append element references in order to update element later on from a synch request?

ios - 使用更大的设备 swift 增加文本大小

ios - 披露指示器未触发辅助 Action 序列

ios - 首次使用 iOS 发送 facebook 应用邀请不显示应用邀请对话框

ios - Cocoa 编程的概念或技术问题

ios - iOS 静态和动态表格 View 单元格的混合