我需要检测用户是否使用iPhone 4,但我需要在模拟器上工作(因为Apple忘记了我的国家,很快就没有iPhone 4的迹象)。
我找到了这个 http://www.clintharris.net/2009/iphone-model-via-sysctlbyname/但是在模拟器上运行它并没有检测到正确的版本。我的意思是,Xcode 3.2.3有两个模拟器(3G / 3GS和4)。我期待检测方法告诉我正在使用的正确版本......但是它告诉我“iphone模拟器”......
有没有办法做到这一点? 感谢。
答案 0 :(得分:4)
您无需检测系统版本。
假设图像名为foo.png
,那么您只需要添加
foo~ipad.png
for iPad foo@2x~iphone.png
适用于iPhone 4 并使用[UIImage imageNamed:@"foo.png"]
加载图片。有关详细信息,请参阅iPhone Application Programming Guide。
答案 1 :(得分:1)
我认为最好检查一下您需要的功能,而不是特定的设备。这肯定是Apple建议的,因为它可以在新设备到来时为您提供保险!
在这种情况下,是否可以检查屏幕大小,并使用它来确定是否需要缩放图像?
[[UIScreen mainScreen] bounds]
答案 2 :(得分:1)
硬件可用性和状态
如果是硬件功能(例如, 陀螺仪不可用于 设备,调用相关的启动方法 该功能无效。您可以 找出是否有硬件功能 通过检查可用或激活 适当的财产;例如,为 陀螺仪数据,你可以查看 陀螺仪的价值可用或 gyroActive属性。
使用
@property(readonly, nonatomic, getter=isGyroAvailable) BOOL gyroAvailable
CMMotionManager 的。
答案 3 :(得分:0)
见
@property (nonatomic, readonly, retain) NSString *systemVersion;
// It equal to @"4.0" on iOS 4.0
和
@property (nonatomic, readonly, retain) NSString *model;
// Possible examples of model strings are @”iPhone” and @”iPod touch”
UIDevice 的。
答案 4 :(得分:0)
来自Erica Sudan:
- (NSString *) platform
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
/*
Possible values:
"iPhone1,1" = iPhone 1G
"iPhone1,2" = iPhone 3G
"iPhone2,1" = iPhone 3GS
"iPhone3,1" = iPhone 4
"iPod1,1" = iPod touch 1G
"iPod2,1" = iPod touch 2G
*/
NSString *platform = [NSString stringWithCString:machine];
free(machine);
return platform;
}
或者,如果您只是需要检测它是否为高分辨率屏幕,您可以使用:
UIScreen *screen = [UIScreen mainScreen];
BOOL isHighRes;
if ([screen respondsToSelector:@selector(scale)]) {
isHighRes = ([screen scale] > 1);
} else {
isHighRes = NO;
}
答案 5 :(得分:-1)
#ifdef __IPHONE_4_0
// Do some work for iPhone 4 device
#else
// Do some work for non iPhone 4 device
#endif
我希望它可以帮到你。