Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS

Richard Rodriguez
Richard Rodriguez
2,687 Points

Device Specific Code?

How do i write code that will be implemented only if the user is using a specific device. For example, if the user is using an iPhone 4 i want an image to have an Xscale of .5 and if the user has an iPhone 6 I want the image xscale of .8

1 Answer

Michael Hulet
Michael Hulet
47,912 Points

WARNING: The method described here is untested, and was entirely formulated while I was writing this answer. It gets tedious for running code conditionally on a lot of devices, and I don't guarantee it works, as it's entirely untested

Apple doesn't give a clear-cut way to check for specific devices. Off the top of my head, I suppose you could start out by detecting the device family (iPhone & iPod touch or iPad) by getting the current UIUserInterfaceIdiom with the following code:

//Possible values are UIUserInterfaceIdiomPad and UIUserInterfaceIdiomPhone
UIUserInterfaceIdiom currentIdiom = [UIDevice currentDevice].userInterfaceIdiom;

Then, you could get the size of the frame of the view of a currently-showing view controller, like this:

CGSize screenSize = [UIApplication sharedApplication].keyWindow.rootViewController.view.frame.size;

You could then figure out what device it is by comparing the size to known device sizes. For example, that size on an iPhone 4s would always be equal to the CGSize returned by CGSizeMake(320, 480); if the iPhone is portrait, or CGSizeMake(480, 320);, if it's landscape. So, in theory, you could conditionally run your code like this:

//For an iPhone 4s only, but the same logic will apply to others. You just need to figure out their size
if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone && (CGSizeEqualToSize([UIApplication sharedApplication].keyWindow.rootViewController.view.frame.size, CGSizeMake(480, 320)) || CGSizeEqualToSize([UIApplication sharedApplication].keyWindow.rootViewController.view.frame.size, CGSizeMake(320, 480)){
    //Run your iPhone 4s-only code here
}