如何检测我的iPhone应用程序正在iPad上运行
我有一个opengl应用程序,可以在RetinaDisplay模式下呈现更好的效果(双比例因子),并且我注意到iPad模拟了具有低分辨率屏幕(正常比例因子)的iPhone应用程序, 。如何检测我的iPhone应用程序正在iPad上运行
我想在iPad上运行我的iPhone应用程序时将比例因子加倍,以便从Retina Display图形中受益。但似乎iPad真的很好地假装成一个iPhone(这将是完美的,如果只有它是一个视网膜显示器一个...)
当我强制双倍规模,它工作得很好(至少在模拟器,我没有iPad来测试)。
所以我需要一种方法来知道我是否在iPad上运行,尽管许多事情告诉我它是一个旧的iPhone。
或者我不应该试图做到这一点?
你不应该能够分辨出来,如果一个iPhone应用程序,那么远因为它可以告诉它在iPhone上运行。如果你想瞄准一个iPad,那么你需要为iPad目标构建它。
查找的文档中,的UIDevice:
例如是这样的: 的NSString *系统= [[的UIDevice currentDevice] SYSTEMNAME];
然后通过使用[system isEqualToString:@“iPad”]判断它是否是ipad。
的UIDevice是一个很不错的类,它也有这样的东西multiTaskingSupported,systemVersion等得爱的UIKit;)
我试过这个解决方案,但它没有检测到iPad。这就是为什么我说它很好地模拟iPhone:它也假装成为这个功能的一个。 – teupoui 2010-12-16 22:19:13
我认为它是:
// Set hello to "Hello, <device or simulator>"!
如果TARGET_IPHONE_SIMULATOR
的NSString *你好= @ “你好,iPhone模拟器!”; NSString * hello = @“你好,iOS设备!”;或者,
ENDIF
如果你正在寻找让自定义代码(最有可能的自定义用户界面相关的方法)的iPad只有这样,你可以使用(如苹果的指示)的UI_USER_INTERFACE_IDIOM()方法存在于iOS 3.2及更高版本
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.
}
这是苹果公司推荐的方法
我认为这是最好的方法,但是在这个例子中,它表示“3.2或更高”,这种方法不适用。这实际上是寻找接口习惯用法,它基本上是设备的屏幕大小,而不是iOS版本。 有关IDIOM的更多信息,请参阅:http://developer.apple。com/library/ios/documentation/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html#// apple_ref/occ/instp/UIDevice/userInterfaceIdiom – WrightsCS 2010-12-16 23:50:56
是的,你是对的,它只适用于iOS 3.2及更高版本 - 但你可以测试如果它存在,如果它不存在,你知道它不是iPad或iPhone 4G,因为它们随附iOS 3.2+,如果它确实响应,则可以同时获得iOS版本和IDIOM – shein 2010-12-17 00:05:18
这对于那些想知道如果该应用程序在iPad上运行,但它适用于在iPad上本机运行的通用应用程序。我想知道,如果我的iPhone专用应用程序是在iPad上运行的,以便切换Retina Display图形,这是一个坏主意。 – teupoui 2010-12-17 11:13:18
约
这实际上只会告诉你,如果 的应用程序是在模拟 环境中运行,或者在实际设备上, 并且对是否没有影响 平台是iPad或iPhone。
事实上,它在编译时说明了您正在编译的平台的目标,因此在运行之前,您需要知道并且执行必要的操作来处理特定的问题。
比如我开发(在模拟器上运行)和生产使用diferent URL,所以我做一些喜欢
#if TARGET_IPHONE_SIMULATOR
#define URL @"http://192.x.x.x/request"
#else
#define URL @"http://example.com/request"
#endif
请注意,#define是一个编译器指令,意味着URL的值将在编译时确定,而不是在运行时确定。 – Mojtaba 2013-04-25 00:04:06
如果应用程序是在iPad在模拟器模式下运行一个iPhone应用程序,它将具有Phone的userInterfaceIdiom,但是是iPad的模型类型。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
[[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
// This app is an iPhone app running on an iPad
}
[检测兼容模式上iPad上运行iPhone应用程序(可能重复http://stackoverflow.com/questions/3242620/detecting-iphone-app-running-:可以用下面的代码检查这ipad-in-compatible-mode) – 2010-12-16 22:14:57
是的,看起来非常像,但没有找到好的答案。 – teupoui 2010-12-16 22:31:38
开始认为这是来自苹果的错误... – teupoui 2010-12-16 22:34:08