当我的iPhone应用程序在iPad上运行时,我想将比例因素加倍,以从Retina Display图形中受益。但似乎iPad真的很好地模仿了iPhone(如果它是一个Retina Display的话,那就太完美了…)
当我强制双倍比例时,在模拟器中工作得非常好(我没有iPad来测试)。
因此,我需要一种方法来知道我是否在iPad上运行,尽管许多事情告诉我它是旧的iPhone。
或者,也许我不应该尝试这样做?
如果该应用是在iPad上以模拟器模式运行的iPhone应用,则其userInterfaceIdiom为Phone,但型号类型为iPad。您可以使用以下代码进行检查:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
[[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
// This app is an iPhone app running on an iPad
}
如果您想为iPad制作自定义代码(最有可能是与自定义UI相关的方法),那么可以使用(如Apple所指示)存在于iOS 3.2及更高版本中的UI_USER_INTERFACE_IDIOM()方法。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
// The device is an iPad running iPhone 3.2 or later.
}
else
{
// The device is an iPhone or iPod touch.
}
这是苹果推荐的方法。
在文档中查找,UIDevice:
例如像这样: NSString *system = [[UIDevice currentDevice] systemName];
然后通过使用 [system isEqualToString:@"iPad"] 来判断是否是 iPad。
UIDevice 是一个非常好的类,它还有像 multiTaskingSupported, systemVersion 等等的属性。简直就是喜欢 UIKit;)
关于
这实际上只会告诉你应用程序是在模拟环境还是实际设备上运行,并不影响平台是iPad还是iPhone。
事实上,它在编译时就会告诉你编译的目标平台,因此在运行之前,你就知道并且可以采取必要的措施来处理特定的问题。
例如,我有不同的URL用于开发(在模拟器上运行)和生产使用,所以我会做一些像这样的事情
#if TARGET_IPHONE_SIMULATOR
#define URL @"http://192.x.x.x/request"
#else
#define URL @"http://example.com/request"
#endif
我认为是这样的:
// Set hello to "Hello, <device or simulator>"!
NSString *hello = @"你好,iOS 模拟器!";
NSString *hello = @"你好,iOS 设备!";
链接 苹果文档
如果是iPhone应用程序,那么只要它能运行在iPhone上,你就不应该能够区分它们之间的差异。如果你想针对iPad开发应用程序,那么你需要为iPad目标构建应用程序。