【问题标题】:Downloading normal image Vs retina device image (2x)下载正常图像与视网膜设备图像(2x)
【发布时间】:2011-04-01 20:58:53
【问题描述】:

当我们需要从某个 URL 下载图像并在两种设备上显示时——Retina(带有 2x 图像)和常规设备——我们是否应该有两个不同的图像 URL 来处理这个问题?

对于资源包中的图像,我们同时保留 xyz.png 和 xyz@2x.png 及其正常工作。

对于我们从服务器获取的图像,我们是否需要为这两种图像提供单独的图像 URL 并使用相同的命名约定(xyz.png 和 xyz@2x.png)在本地缓存它们?

请给这里一些亮点。

【问题讨论】:

    标签: iphone cocoa-touch ios uiimageview uiimage


    【解决方案1】:

    您可以检查设备是否具有高分辨率 Retina 显示屏,并根据该显示屏下载不同的图像。不要为界面大小而缩放的照片和东西而烦恼。
    您可以使用

    创建下载图像的缩放版本
    UIImage *image = //download...
    image=[UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp];
    

    请记住,缩放后的 100x100 图像将变为 50x50 点图像(2.0 比例)。

    首先检查你是否有视网膜显示器

    BOOL retina = NO;
    if([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO;
    

    【讨论】:

    • 这里有一个问题。如果我们需要将此图像缓存在文件系统中,那么我们应该以 xyz@2x.png 格式保存它吗?这样当我们从文件系统中检索它时,IOS 就可以识别它。
    • @Abhinav @2x 魔法仅适用于 [UIImage imageNamed:@"foo"]; 并且此方法仅适用于保存到包中的图像。并且捆绑包不可写,您无法将图像保存在那里。因此,您没有优势。但是用户可能会在旧设备上使用您的软件,iTunes 会保存所有内容,然后他购买带有视网膜显示屏的设备并使用您的所有图像数据恢复备份。然后他会在视网膜设备上使用正常图像。所以我还是建议使用@2x 扩展,但是你必须手动管理它。
    • 好的。因此,基于它是否是视网膜设备,我们仍然需要区分文件名,以便稍后可以使用该名称读取它们,因为 IOS 不会处理这个。
    • 我建议这样做。只需编写您自己的方法,根据[[UIScreen mainScreen] scale] 选择正确的图像。无论如何,您都需要这种方法来下载文件。这些小细节决定了普通应用和优秀应用之间的区别。
    【解决方案2】:
    CGFloat screenScale = [UIScreen mainScreen].
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:myUrl] scale:screenScale];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多