什么是代码来检测是否运行iPhone,iPhone Retina显示器或iPad的iOS应用程序?

什么是代码来检测是否运行iPhone,iPhone Retina显示器或iPad的iOS应用程序?

背景:

  • 对于我的iPhone应用程序,我已经在XCode目标/摘要页面中定义了以下具体图像:iPhone启动图像,iPhone视网膜显示启动图像,iPad纵向和iPad横向。

  • 在主视图中有一个UIImageView子视图用于背景图像 – 目前我通过select用于iPhone启动图像的图像在XCode(而不是编程)中指定。

所以我问如何判断我正在运行哪一个,以便在viewDidLoad我可以加载适当的决议背景图像。 然后应用程序启动的背景图像和应用程序主屏幕的背景之间应该有一个无缝的过渡。

您可以使用[[UIDevice currentDevice] userInterfaceIdiom]来确定您是在iPhone / iPod touch还是在iPad上运行。

通常不需要直接确定您是否在视网膜显示器上,因为当您使用imageNamed时, UIImage会自动处理这些图像,并将“@ 2x”附加到您的高分辨率图像文件名称中(请参阅“graphics和打印指南”中的支持高分辨率屏幕对于iOS)。

如果您确实需要知道屏幕的分辨率,请使用UIScreenscale方法。

以下是我使用的两个有用的类方法,它们直接回答您的问题 – 您可能想要进一步使用该方法:

 +(BOOL)isPad { #ifdef UI_USER_INTERFACE_IDIOM return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; #endif return NO; } +(BOOL)hasRetinaDisplay { // checks for iPhone 4. will return a false positive on iPads, so use the above function in conjunction with this to determine if it's a 3GS or below, or an iPhone 4. if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) return YES; else return NO; } 

对于Swift解决scheme:

  if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) { // Ipad } else { // Iphone } 

请参阅@interface UIDevice

以及-[UIImage scale]的文档(虽然有更好的资源,可能会被张贴)。

这里是一些代码复制和粘贴…

 bool runningOniPhone; if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ runningOniPhone = TRUE; } else { runningOniPhone = FALSE; }