我从这里找到了解决方案: Determine device (iPhone, iPod Touch) with iPhone SDK为了检测IOS设备类型
从链接,它建议使用库https://gist.github.com/1323251
但显然库是相当过时。我无法在列表中找到iPhone 5和新iPad等。
有谁知道我该如何找到完整的和更新的列表?
非常感谢。
我从这里找到了解决方案: Determine device (iPhone, iPod Touch) with iPhone SDK为了检测IOS设备类型
从链接,它建议使用库https://gist.github.com/1323251
但显然库是相当过时。我无法在列表中找到iPhone 5和新iPad等。
有谁知道我该如何找到完整的和更新的列表?
非常感谢。
以下是https://gist.github.com/1323251的更新版本。 当新设备发布时,我会保持更新。
,你可以很容易地检测iphone
,iphone5
和iPad
与以下条件: -
if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone)
{
if ([[UIScreen mainScreen] bounds].size.height == 568.0f)
{
}
else
{
//iphone 3.5 inch screen
}
}
else
{
//[ipad]
}
我的回答: - Detect device type
请不要比较'使用'=='浮动',这是不安全的。您最好使用[[UIScreen mainScreen]边界] .size.height> 567'。 – 2013-01-17 05:52:08
接下来有传闻说iPod将会有5英寸的屏幕,所以如果你想为将来制作应用程序,这将导致很小的概率 – amar
@ H2CO3是正确的!或者只是将它与浮点数相比较, [[UIScreen mainScreen]范围] .size .height == 568。0f – sleepwalkerfx
使用下面的代码:
#import <sys/utsname.h>
- (NSString *)machineName
{
struct utsname systemInfo;
uname(&systemInfo);
NSString *temp = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
if ([temp rangeOfString:@"iPod"].location != NSNotFound)
{
return @"iPod";
}
if ([temp rangeOfString:@"iPad"].location != NSNotFound)
{
return @"iPad";
}
if ([temp rangeOfString:@"iPhone"].location != NSNotFound)
{
return @"iPhone";
}
return @"Unknown device";
}
而不是'if(!(stuff == bar) )',使用更易读的'if(stuff!= bar)'。请! – 2013-01-17 05:53:32
对不起,我的坏会保重,如果将来 – amar
您可以使用以下代码
if(screenSize.width==2048 && screenSize.height==1536)
{
LetterParams.DeviceType=1;//IPadRetina
}
else if(screenSize.width==2048/2 && screenSize.height==1536/2)
{
LetterParams.DeviceType=2;//IPad Non-Retina
}
else if(screenSize.width==1136 && screenSize.height==640)
{
LetterParams.DeviceType=3;//IPhoneRetina
}
else
{
LetterParams.DeviceType=4;//IPhone & Ipod
}
比较浮点值是相当不安全的。根据CPU的情绪,你会发现如果条件不当,你会得到很多的假阴性,导致他们错误地进入'其他' – mylogon
这是我想到的一种方法,专注于屏幕测量功能的关键设备。这是确定您需要什么的快速方法。这将检测到iPhone 5和第5代iPod touch。
typedef enum{
iPadRetina,iPadNoRetina,iPhoneiPod35InchRetina,iPhoneiPod35InchNoRetina,iPhoneiPod4InchRetina}DeviceType;
-(void)yourCustomFunctionThatNeedsToKnowDeviceType
{
NSLog(@"device type = %i",[self getDeviceType]);
switch ([self getDeviceType])
{
case iPadRetina:
{
NSLog(@"This device is one of the following: iPad 3, iPad 4");
break;
}
case iPadNoRetina:
{
NSLog(@"This device is one of the following: iPad 1, iPad 2, iPad mini");
break;
}
case iPhoneiPod35InchRetina:
{
NSLog(@"This device is one of the following: iPhone 4/4S or iPod Touch 4th Generation");
break;
}
case iPhoneiPod35InchNoRetina:
{
NSLog(@"This device is one of the following: iPhone 3G/3GS or iPod Touch 3rd Generation");
break;
}
case iPhoneiPod4InchRetina:
{
NSLog(@"This device is one of the following: iPhone 5 or iPod Touch 5th Generation");
break;
}
}
}
-(int)getDeviceType
{
// Get the ratio of the device's screen (height/width)
CGFloat screenRatio = [UIScreen mainScreen].bounds.size.height/[UIScreen mainScreen].bounds.size.width;
// Initialize return value to negative value
DeviceType type = -1;
if(screenRatio > 1.5)
{
/*
4.0-Inch Screen
This implies that the device is either an iPhone 5 or a 5th generation iPod
Retina display is implicit
*/
type = iPhoneiPod4InchRetina;
}
else
{
/*
Device must be iPad 1/2/3/4/mini or iPhone 4/4S or iPhone 3G/3GS
*/
// Take a screenshot to determine if the device has retina display or not
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *scaleCheckImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
/*
Device must be iPad 1/2/3/4/mini
*/
if(scaleCheckImage.scale == 1)
{
// iPad 1/2/mini (No Retina)
type = iPadNoRetina;
}
else if(scaleCheckImage.scale == 2)
{
// iPad 3/4 (Retina)
type = iPadRetina;
}
}
else
{
/*
Device must be iPhone 4/4S or iPhone 3G/3GS or iPod Touch 3rd Generation or iPod Touch 4th Generation
*/
if(scaleCheckImage.scale == 1)
{
// iPhone 3G/3GS or iPod Touch 3rd Generation (No Retina)
type = iPhoneiPod35InchNoRetina;
}
else if(scaleCheckImage.scale == 2)
{
// iPhone 4/4S or iPod Touch 4th Generation (Retina)
type = iPhoneiPod35InchRetina;
}
}
}
return type;
}
这只是正常:
if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
NSLog(@"IPAD");
}else{
NSLog(@"IPHONE");
}
这个答案应该是所有的分数点! –
我和其他人都保持在GitHub上代码,所以请把最新的代码从那里。我们不断在列表中添加新设备。
Objective-C的:GitHub/DeviceUtil
斯威夫特:GitHub/DeviceGuru
#include <sys/types.h>
#include <sys/sysctl.h>
- (NSString*)hardwareDescription {
NSString *hardware = [self hardwareString];
if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G";
if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G";
if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad";
if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini";
if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI";
//there are lots of other strings too, checkout the github repo
//link is given at the top of this answer
if ([hardware isEqualToString:@"i386"]) return @"Simulator";
if ([hardware isEqualToString:@"x86_64"]) return @"Simulator";
return nil;
}
- (NSString*)hardwareString {
size_t size = 100;
char *hw_machine = malloc(size);
int name[] = {CTL_HW,HW_MACHINE};
sysctl(name, 2, hw_machine, &size, NULL, 0);
NSString *hardware = [NSString stringWithUTF8String:hw_machine];
free(hw_machine);
return hardware;
}
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
{
NSLog(@"All iPads");
}
else
{
else if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)
{
if(screenHeight > 480 && screenHeight < 667)
{
NSLog(@"iPhone 5/5s/6");
}
else if (screenHeight > 480 && screenHeight < 736)
{
NSLog(@"Other iPhones Resizable");
}
else if (screenHeight > 480)
{
NSLog(@"iPhone 6 +");
}
else
{
NSLog(@"iPhone 4s and others");
}
}
只是增加@Mohammad卡姆兰Usmani答案。更具体的iPhone类型:
@import UIKit;
//Check which iPhone it is
double screenHeight = [[UIScreen mainScreen] bounds].size.height;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
{
NSLog(@"All iPads");
} else if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)
{
if(screenHeight == 480) {
NSLog(@"iPhone 4/4S");
smallFonts = true;
} else if (screenHeight == 568) {
NSLog(@"iPhone 5/5S/SE");
smallFonts = true;
} else if (screenHeight == 667) {
NSLog(@"iPhone 6/6S");
} else if (screenHeight == 736) {
NSLog(@"iPhone 6+, 6S+");
} else {
NSLog(@"Others");
}
}
检查http://parasjoshi3.blogspot.ro/2013/01/get-device-model-or-device-type-and.html – TonyMkenu