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

问题描述:

检测iPhone,iPhone Retina显示屏或iPad上运行的ios应用程序的代码是什么?检测iPhone,iPhone Retina显示器或iPad上运行的ios应用程序的代码是什么?

背景:

  • 因为我在Xcode目标/摘要页面中定义的特定图片为我的iPhone应用程序:iPhone推出的形象,iPhone的视网膜显示启动图像,iPad的肖像& iPad的景观。

  • 在主视图中有一个UIImageView子视图用于背景图像 - 目前我通过选择用于iPhone启动图像的图像在XCode(而非编程)中指定此图像。

所以我问怎么告诉我内运行的一个,这样,在viewDidLoad中我可以加载合适分辨率的背景图像。然后,应用程序启动的背景图像与应用程序主屏幕的背景在启动后应该有无缝过渡。

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

有往往不需要直接无论你确定的视网膜显示器上,因为UIImage句柄时,会自动使用imageNamed和“@ 2x”不追加到您的高分辨率图像文件名(见Supporting High-Resolution Screens绘图和打印指南对于iOS)。

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

+8

音符'[[的UIDevice currentDevice] userInterfaceIdiom]'可以针对'UIUserInterfaceIdiomPho检查ne'或'UIUserInterfaceIdiomPad' –

看到@interface UIDevice

以及在-[UIImage scale]文档(虽然有更好的资源,这将有可能被公布)。

这里有2种有用的方法,我使用,这直接回答你的问题 - 你可能想进一步利用上下行:

+(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; 
} 
+1

非常漂亮的卢克...... – Greg

下面是一些代码复制并粘贴...

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

的SWIFT解决方案:

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