• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 将图像从 Web 服务器保存到手机以获取图像 slider

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:46:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个应用程序,它从数据库中提取图像的 url 并将其存储在 coredata 中。然后在我的应用程序 View 中,有一个 ImageView 的 ScrollView ,基本上我正在尝试做一个图像 slider 。这些图像往往会更新,因此需要从服务器加载。我从 coredata 加载图像 url,将它们下载到 uiimages 并在我的 View 中加载它们。问题是,它真的很慢,因为我在运行时这样做。

我想知道解决此问题的最佳方法是什么。我想在应用程序启动时先将所有图像加载到手机上?我尝试寻找一些示例代码来指向正确的方向,但我只能找到将图像保存到手机相机胶卷而不是应用程序本身的代码。任何人都可以帮忙吗?谢谢!



Best Answer-推荐答案


这是一个方法,它采用 UIImage、目标路径(您要保存图像的目录)和图像的文件名,并将图像保存为 PNG 文件:

-(BOOL) saveImageUIImage *)image savePathNSString *)savePath filenameNSString *)filename{
    savePath = [savePath stringByAppendingPathComponent:filename];
    NSData *sourceData = UIImagePNGRepresentation(image);
    return [sourceData writeToFile:savePath atomically:YES]; 
}

您需要将图像存储在应用沙箱内的正确位置。例如,不要将它们放在 Documents 文件夹中,因为它可能会被 Apple 拒绝,因为您可以重新创建(或重新下载)图像。您可能希望将它们放在 Library/Caches 文件夹中,并准备好在它们被删除时重新下载它们。见 iOS File System Programming Guide有关详细信息。

我会担心在应用程序启动时下载所有文件,因为如果在下载大量图像文件时应用程序无响应,它会看起来像已卡住。您可以在后台下载图片,并在图片下载完成后更新 UI。

执行此操作的一种方法是检查图像是否已经下载(例如,它是否在 Library/Caches 文件夹中)。如果是,则使用它,否则使用占位符图像,直到下载图像。例如:

if (isImageAvailable) {
    displayedImageView.image = cachedImage;
} else {
    displayedImageView.image = placeholderImage;
    [self getImageAtURL:imageURL andThenDo:^(UIImage *image) {

        // Replace placeholder image with downloaded image
        displayedImageView.image = image;

    }];
}

isImageAvailable 替换为检查 Library/Caches 文件夹中是否存在图像文件的方法。 displayedImageView 是您用来显示图像的 UIImageView

getImageAtURL 方法类似于:

-(void)getImageAtURLNSURL *)url andThenDovoid(^)(UIImage *image))completionBlock{

    // Run on background thread
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        UIImage *image;

        // Insert code to download image...

        // Switch to main (UI) thread to allow updating the UI
        dispatch_sync(dispatch_get_main_queue(), ^{
            completionBlock(image);
        });
    });

}

关于ios - 将图像从 Web 服务器保存到手机以获取图像 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995691/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap