10

what is the code to detect whether ios app running in iPhone, iPhone Retina display, or iPad?

Background:

  • for my iPhone application I have defined in XCode target/summary page the specific images for: iPhone launch image, iPhone retina display launch image, iPad portrait & iPad landscape.

  • in the main view there is a UIImageView subview I use for the background image - currently I'm specifying this in XCode (not programmatically) by selecting the image I use for the iPhone launch image.

So I'm asking how to tell which one I'm running within so that in the viewDidLoad I can load the appropriate resolution background image. Then there should be a seamless transition between the background image for app startup, and the background of the app main screen once it's started.

Greg
  • 34,042
  • 79
  • 253
  • 454

5 Answers5

18

You can use [[UIDevice currentDevice] userInterfaceIdiom] to determine whether you're running on an iPhone/iPod touch or an iPad.

There's often no need to determine directly whether you're on a retina display because UIImage handles that automatically when you use imageNamed and append "@2x" to your high resolution image file names (see Supporting High-Resolution Screens in the Drawing and Printing Guide for iOS).

If you really need to know which resolution the screen has, use UIScreen's scale method.

omz
  • 53,243
  • 5
  • 129
  • 141
  • 8
    note `[[UIDevice currentDevice] userInterfaceIdiom]` can be checked against `UIUserInterfaceIdiomPhone` or `UIUserInterfaceIdiomPad` – nonopolarity Jun 29 '12 at 12:49
8

Here's 2 useful class methods that I use, which directly answers your question - which you may want to use further down the line:

+(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;
}
Luke
  • 11,426
  • 43
  • 60
  • 69
1

For Swift Solution:

 if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad)     
 {
        // Ipad
 }
 else 
 {
       // Iphone
 }
Masterfego
  • 2,648
  • 1
  • 26
  • 32
0

Here is some code to copy and paste...

bool runningOniPhone;
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    runningOniPhone = TRUE;
} else {
    runningOniPhone = FALSE;
}
Dustin
  • 213
  • 2
  • 5
0

see @interface UIDevice

as well as the documentation at -[UIImage scale] (although there are better resources, which will likely be posted).

justin
  • 104,054
  • 14
  • 179
  • 226