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

时间:2011-08-27 20:51:23

标签: iphone ios ipad uiimage scale

检测ios app是否在iPhone,iPhone Retina显示器或iPad上运行的代码是什么?

背景:

  • 我的iPhone应用程序我已在XCode目标/摘要页面中定义了特定图像:iPhone启动图像,iPhone视网膜显示启动图像,iPad肖像& iPad风景。

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

所以我问如何判断我在哪一个运行,以便在viewDidLoad中我可以加载适当的分辨率背景图像。然后应用程序启动的背景图像与应用程序主屏幕启动后的背景应该是无缝过渡。

5 个答案:

答案 0 :(得分:18)

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

通常无需直接确定您是否在视网膜显示器上,因为UIImage在您使用imageNamed时自动处理并将“@ 2x”附加到您的高分辨率图像文件名称(请参阅iOS版绘图和打印指南中的Supporting High-Resolution Screens

如果您确实需要知道屏幕的分辨率,请使用UIScreen的{​​{1}}方法。

答案 1 :(得分:8)

以下是我使用的两种有用的类方法,它直接回答了您的问题 - 您可能希望进一步使用该方法:

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

答案 2 :(得分:1)

对于Swift解决方案:

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

答案 3 :(得分:0)

请参阅@interface UIDevice

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

答案 4 :(得分:0)

以下是一些要复制和粘贴的代码......

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