0

我需要区分我的 iPhone 应用程序中的视网膜屏幕或普通屏幕,类似于以下内容:

#if TARGET_OS_IPHONE_VERSION < 3

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"close.png"];
UIImage *image = [UIImage imageWithContentsOfFile: uniquePath];

#endif

#if TARGET_OS_IPHONE_VERSION >= 4

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"close@2X.png"];
UIImage *image = [UIImage imageWithContentsOfFile: uniquePath];

#endif

任何想法?

4

4 回答 4

0

你不需要这个。首先,预处理器无助于定义 Retina 屏幕,因为它们是在编译时定义的。但无论如何,由于 Apple 约定,您不需要它。只需在您的项目中有一个“close.png”就足够了

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"close.png"];
UIImage *image = [UIImage imageWithContentsOfFile: uniquePath];

我想你只是想要这个

UIImage *image = [UIImage imageNamed:@"close.png"];

如果在您构建项目时 close.png(和两倍大小的 close@2x.png)在您的项目中,则第二个示例就是要使用的示例。测试一下,你会看到一个retina手机会显示@2x文件

于 2011-12-07T16:38:42.180 回答
0

不,你没有。不使用 UIImage,它会为您做到这一点。

于 2011-12-07T16:23:39.310 回答
0

你不能用预处理器来做。你可以定义自己的符号,但我不确定你会做什么。不知何故告诉苹果不同版本的应用程序在不同的设备上运行?

更好的是在运行时进行。看UIScreen scale楼盘。

当然,正如另一个答案所说,通常你不需要这样做。大多数 UIKit 函数都会为你添加 @2x。您需要了解一些极端情况,即scale属性何时发挥作用。

于 2011-12-07T16:25:19.293 回答
0

预处理器指令在编译时解析。在您的示例中,这意味着编译器在 iphone 上运行时不会在这些代码块之间做出决定,它将决定您何时构建应用程序。因此,除非您为每个平台构建不同的应用程序,否则您必须在运行时确定这一点。

我确信有一种方法可以获取您正在运行的 iOS/iPhone 版本。只需在初始化应用程序或需要此代码时执行此操作,然后在此处使用 if/else。

于 2011-12-07T16:26:22.760 回答