在 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】:这可能会奏效。首先它检查屏幕是否有视网膜显示,如果有,将背景图像设置为视网膜图像。如果它没有视网膜显示器,则背景图像是常规图像。您可以将其放入viewWillAppear
或viewDidLoad
。
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 以编程方式更改资源的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CollectionViewController 中为 gif 设置动画.. (Objective-C)
在 Objective-C 中为 AVAudioEngine 设置录制格式
在 Objective-C 中为目前的 2 UIViewController 创建一个 UINavigationController