在 Objective-C iOS 5 中为 Retina Display 以编程方式更改资源

Posted

技术标签:

【中文标题】在 Objective-C iOS 5 中为 Retina Display 以编程方式更改资源【英文标题】:Changing resources programmatically in Objective-C iOS 5 for Retina Display 【发布时间】:2012-06-14 01:59:41 【问题描述】:

我的应用有一张背景图片,可以填满屏幕。我想根据我们是否在 Retina Display 设备上显示正确的 .png 文件。我已经为 iPhone 和 ios 添加了所有大小正确的 .png 文件。是否可以 ?如果不是,我应该如何正确处理?

我有 XCode 4.3.2 和 iOS 5.1 作为部署目标。

【问题讨论】:

【参考方案1】:

如果您正确命名您的图形(例如,在 png 文件的后缀中添加“@2x”),iOS 就足够智能,可以在适当的设备和显示器上使用您的 Retina 显示图形。特别是如果您在 XIB 文件中设计的用户界面中使用 UIImageViews 或控件或其他任何东西。

如果您正在处理程序化图像(即您定义一个插座,然后通过类似“[UIImage imageNamed:] 的方式获取图像,iOS 仍然足够聪明,可以为您获取高分辨率图像。再次,只要您正确命名您的图形。

*** 上的其他问题可能会对您有所帮助,例如:

How to support both iPad and iPhone retina graphics in universal apps

How to activate @2x high res graphics for retina display?

【讨论】:

【参考方案2】:

这可能会奏效。首先它检查屏幕是否有视网膜显示,如果有,将背景图像设置为视网膜图像。如果它没有视网膜显示器,则背景图像是常规图像。您可以将其放入viewWillAppearviewDidLoad

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0)) 

    // Retina display
    UIImage *backgroundImage = [UIImage imageNamed:@"retinaImage.png"];

 else 

    // Non-Retina display
    UIImage *backgroundImage = [UIImage imageNamed:@"nonRetinaImage.png"];


希望这会有所帮助!

【讨论】:

刻度位做了。谢谢!我有一个应用程序在运行时下载图像,我想为视网膜和非视网膜显示器下载正确的图像(分辨率)......所以我不能依赖@2x 约定,因为我没有得到实际的文件名(被提供通过动态调整文件大小和格式的媒体服务器)

以上是关于在 Objective-C iOS 5 中为 Retina Display 以编程方式更改资源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中为文本字段设置数字范围?

如何在 CollectionViewController 中为 gif 设置动画.. (Objective-C)

在objective-c中为原始类型分配内存的最佳实践

在 Objective-C 中为 AVAudioEngine 设置录制格式

在 Objective-C 中为目前的 2 UIViewController 创建一个 UINavigationController

《iOS开发全然上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C新手训练营