异步加载图像到 UICollectionView?

2023-11-24

我如何将图像加载到UICollectionview异步? 下面的方法里面?

- (PSTCollectionViewCell *)collectionView:(PSTCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

 bookImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", docPath, [[preview objectAtIndex:indexPath.row] lastPathComponent]]];
 [[cell grid_image] setImage:bookImage];

}

In viewdidload()我正在使用以下异步调用将图像加载到“预览”NSMutablearray

 dispatch_queue_t imageLoadQueue = dispatch_queue_create("com.GMM.assamkar", NULL);

dispatch_async(imageLoadQueue, ^{
    //Wait for 5 seconds...
    usleep(1000000);
    docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];


    for(int k=0; k <[allImage count] ;k++){


        imgURL = [allImage objectAtIndex:k];
        [imagePreview addObject:imgURL];
        imgData=[NSData dataWithContentsOfURL:[NSURL URLWithString:imgURL]];


        [imgData writeToFile:[NSString stringWithFormat:@"%@/%@", docPath, [allImage lastPathComponent]] atomically:YES];

    }

    [[self collectionView] reloadData];


});

请帮助我..现在加载时间太长了...


尝试回答您的主要问题“我如何将图像加载到UICollectionview异步?”

我建议“娜塔莎·穆拉舍夫" here,这对我来说效果很好而且很简单。

If here imgURL = [allImage objectAtIndex:k]; in allImage属性,您保留 URL 数组,然后更新您的collectionView:cellForItemAtIndexPath:像这样的方法:

- (PSTCollectionViewCell *)collectionView:(PSTCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSURL *url = [NSURL URLWithString:[allImage objectAtIndex:indexPath]];

    [self downloadImageWithURL:url completionBlock:^(BOOL succeeded, NSData *data) {
        if (succeeded) {
            cell.grid_image.image = [[UIImage alloc] initWithData:data];
        }
    }];
}

并添加方法downloadImageWithURL:completionBlock:到您的类,它将异步加载图像并在成功下载图像时自动更新 CollectionView 中的单元格。

- (void)downloadImageWithURL:(NSURL *)url completionBlock:(void (^)(BOOL succeeded, NSData *data))completionBlock
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        if (!error) {
            completionBlock(YES, data);
        } else {
            completionBlock(NO, nil);
        }
    }];
}

我看到您尝试在视图出现之前预加载图像,所以也许我的解决方案不是您想要的,但从您的问题来看很难说。无论如何,你也可以通过这个实现你想要的。

斯威夫特2.2Swift 中的解决方案。

public typealias ImageFetchCompletionClosure = (image: UIImage?, error: NSError?, imageURL: NSURL?) -> Void

extension String {
   func fetchImage(completionHandler: (image: UIImage?, error: NSError?, imageURL: NSURL?) -> Void) {
        if let imageURL = NSURL(string: self) {
            NSURLSession.sharedSession().dataTaskWithURL(imageURL) { data, response, error in
                guard
                    let httpURLResponse = response as? NSHTTPURLResponse where httpURLResponse.statusCode == 200,
                    let mimeType = response?.MIMEType where mimeType.hasPrefix("image"),
                    let data = data where error == nil,
                    let image = UIImage(data: data)
                    else {
                        if error != nil {
                            completionHandler(image: nil, error: error, imageURL: imageURL)
                        }
                        return
                }
                dispatch_sync(dispatch_get_main_queue()) { () -> Void in
                    completionHandler(image: image, error: nil, imageURL: imageURL)
                }
            }.resume()
        }
    }
}

使用示例:

    "url_string".fetchImage { (image, error, imageURL) in
        // handle different results, either image was downloaded or error received
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异步加载图像到 UICollectionView? 的相关文章

  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • 从 UIPickerView 的选定行设置 UIButton 的标题

    详细场景是这样的 我使用循环创建 10 个按钮并设置 0 9 的标签 点击每个按钮时 我将调用 UIPickerView 在其中加载来自不同数组的数据 到这里我就得到了预期的结果 但我希望 pickerView 中选定的行应设置为相应按钮的
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • 将自定义数据包含到 iOS 故障转储中

    你好 堆栈溢出 有一个简单的问题要问您 当我的应用程序在用户的设备上崩溃时 是否可以将自定义错误数据嵌入到自动生成的 iOS 故障转储中 例如 我的 SQlite 数据库由于某种原因无法运行 例如 数据库文件已损坏 我无法从这个错误中恢复
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • 从命令行添加 Xcode 开发者帐户

    我正在尝试使用xcodebuild allowProvisioningUpdates在我只能通过命令行访问的计算机 Azure Devops macOS 托管计算机 上 不幸的是 根据man xcodebuild为了使用 allowProv
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • 在 Swift 中从 Parse 加载图像

    我成功地将数据从 Parse 提取到 swift 中 但我的图像似乎没有按照我的方式工作 在我的 cellForRowAtIndexPath 方法中 我执行以下操作 var event AnyObject eventContainerArr
  • 处理 UICollectionView 中的点击手势

    由于我无法使用任何框架来创建相册 因此我尝试使用 Collection View 创建自己的相册 但我一开始就陷入困境 我的目标是将网络服务中的所有图像显示到我的集合视图中 因为所有图像都已显示 下一步是当有人点击任何单元格时 我可以在新视
  • 为什么 Objective-C 允许在方法定义末尾使用分号? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 实现文件中方法名后面的分号 https stackoverflow com questions 5678360 semicolon after the method name
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 如何为 UIImageView 随机化器实现滑动手势

    我一直在浏览大量的教程和问题 但似乎找不到我要找的东西 我有一种感觉 我只是错过了一个简单的步骤 我仍在学习诀窍 所以请承受和我一起做这个 我正在 xcode 4 3 3 上制作图像随机化器 并且我已经能够使用按钮来随机化图像 但我希望它能
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • Android 打开外部存储目录(sdcard)用于存储文件

    我想打开外部存储目录路径以编程方式保存文件 我尝试过但没有获取 SD 卡路径 我该怎么办 有什么解决办法吗 private File path new File Environment getExternalStoragePublicDir
  • 延长课程是一个好的做法吗?

    我的数据库类中有一个 PDO 连接 最近我一直使用它作为其他类的扩展 即class Users extends Database这使我能够始终保持数据库连接 而无需在我的 Users 类中拥有函数 然而 有人指出我不应该这样做 因为这是一种
  • 分号有什么作用?

    我在网上找到了一个函数来帮助我完成当前的项目 并且它的某些行上有分号 我想知道为什么 是为了破坏功能吗 def containsAny self strings alphabet abcdefghijklmnopqrstuvwxyz0123
  • JQuery/JQuery UI 水平分隔线

    最近 我正在开发一个网站 我想创建一个水平分隔线 能够使用 jquery 调整页面上两个元素的大小 基本上 Content 您还可以查看UI Layout jQuery 插件 这是一个demo
  • 如何在链接的 npm 依赖项(开发中)和已安装的依赖项(暂存/生产中)之间切换?

    我正在开发一个自定义 npm 模块 并且它有一个 GitHub 存储库 我还在开发一个使用自定义模块的项目 当处理较大的项目时 使用它是很好的npm link这样我就可以对模块进行更改并立即在主项目中看到它们 To deploy to st
  • 在flutter中,如何将facebook受众作为中介网络与Admob集成?

    我是广告中介新手 我有一个 flutter 应用程序 并且使用以下 admob flutter 插件集成了 admob 并且它在 Android 和 iOS 上运行良好 https pub dev packages admob flutte
  • 暴雪官方魔兽世界 API 在哪里?

    我想知道是否可以通过 API 访问 魔兽世界 我的要求非常明确 必须是暴雪官方API 必须可以在游戏外访问 暴雪现已发布社区 API 允许您直接从暴雪服务获取信息 例如领域状态 玩家和拍卖数据 https dev battle net io
  • 使用构建参数构建 Docker 映像并将其从 DevOps 推送到 ACR

    我正在 Azure DevOps 管道中构建 Docker 映像 然后我想将其推送到 Azure 容器注册表 注册表已创建 并且我已配置 DevOps 来使用它 还有buildAndPushDocker任务 works 然而 由于 Dock
  • Android - 检索联系人照片并显示

    我正在创建一个简单的应用程序 用于检索每个联系人的姓名和电话号码 并在列表视图中显示 并在行开头的缩略图大小的图像视图中显示联系人的照片 我已成功检索并显示姓名和号码 但在浏览了许多教程和堆栈后未能显示照片 我最终将其恢复为仅显示姓名和号码
  • 如何生成动态 GRF 图像以进行 ZPL ZEBRA 打印

    我有个问题 我正在生成动态 BMP 图像并尝试通过 ZPL 命令将其发送到 ZEBRA 打印机 我需要将 BMP 图像转换为 GRF 图像 我认为 BMP 图像提取的十六进制不正确 打印的图像模糊且不正确 这是我的代码 string bit
  • 在java中计算两个双精度数的余数

    我有以下代码 Double x 17 0 Double y 0 1 double remainder x doubleValue y doubleValue 当我运行这个时 我得到余数 0 09999999999999906 知道为什么吗
  • 在 JavaFX 控制器中获取单击对象的 id 的更好方法

    我正在寻找一种更好的方法来获取该对象的事件处理程序中单击的对象的 id 我已经找到了这个 javafx 将 fx id 传递给控制器 或 fxml onAction 方法中的参数 但这对我不起作用 现在我使用节点类的 getId 函数 如下
  • 如何使用 boost::spirit 匹配 unicode 字符?

    如何使用 utf8 unicode 字符匹配boost spirit 例如 我想识别这个字符串中的所有字符 echo a out 当我尝试这个简单的boost spirit程序将无法正确匹配 unicode 字符 include
  • Spark csv读取速度很慢虽然我增加了节点数

    我在 Google Compute Engine 上创建了两个集群 这些集群读取 100 GB 数据 集群一 1 个主控 15 GB 内存 250 GB 磁盘 10 个节点 7 5 GB 内存 200 GB 磁盘 集群二 1 个主控 15
  • 在 MySQL 中使用/存储加密密钥的最佳方法是什么

    我计划使用 MySQL 及其内置加密功能来加密 解密某些表中的某些列 我担心的是我需要将密钥存储在某个地方 我当然可以将密钥存储在文件中并控制该文件的权限以及访问它的应用程序的权限 但这足够了吗 我还可以创建一个网络服务来获取密钥或其他东西
  • 进程间通信选项

    我需要在一个应用程序内订阅另一个应用程序公开的事件 我注意到许多人认为使用 WCF 命名管道是最佳实践 如果我选择 WCF 命名管道 我就必须使用 IIS 对吗 顺便问一下 我一般有哪些选择 命名管道是在同一台机器上进行 IPC 进程间通信
  • 如何使用泛型参数为任何方法构建表达式调用

    我只是尝试使用 Linq Expression 制作如下相同的表达式 Expression
  • ckfinder 调整图像大小

    使用 ckfinder 选择或上传图像后 用户可以更改宽度和高度 我希望它自动将图像大小调整为用户设置的宽度和高度 那可能吗 我认为 ajax 图像调整器可以解决这个问题 但无法让它工作 有人有自动宽度和高度调整大小插件的经验吗 在我的 c
  • 将大量 csv 文件导入 PostgreSQL 数据库的有效方法

    我看到很多将 CSV 导入 PostgreSQL 数据库的示例 但我需要的是一种将 500 000 个 CSV 导入单个 PostgreSQL 数据库的有效方法 每个 CSV 略多于 500KB 总计约 272GB 数据 CSV 的格式相同
  • 异步加载图像到 UICollectionView?

    我如何将图像加载到UICollectionview异步 下面的方法里面 PSTCollectionViewCell collectionView PSTCollectionView collectionView cellForItemAtI