こんにちは私はiOSでiPhoneデバイスのバージョンを確認したいと思います。
つまり、現在実行中のデバイスはiPhone4またはiPhone5です。
デバイスを確認する必要がありますが、それはiPhone 5ですか?
私のアプリにはiPhone5を知っている必要があるかどうかという問題があるからです。
では、どうすればよいですか?
このコードを追加します:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
CGSize result = [[UIScreen mainScreen] bounds].size;
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
if(result.height == 960) {
NSLog(@"iPhone 4 Resolution");
resolution_number = 1;
}
if(result.height == 1136) {
NSLog(@"iPhone 5 Resolution");
}
}
else{
NSLog(@"Standard Resolution");
}
}
このマクロをコードに追加します。
#define HEIGHT_IPHONE_5 568
#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 )
その後、必要なときにいつでも確認してください。
if (IS_IPHONE_5) {
//Code for iPhone5
}else{
//Code for earlier version
}
この質問の回答に基づいて、これによってどのモデルを使用しているかを判断できます。
NSString *deviceModel = [UIDevice currentDevice].model;
結果は、iPod touch、iPhone、iPad、iPhoneシミュレーター、iPadシミュレーターのいずれかの値になります。
UIDevice.h
特定のモデルの場合、使用しているバージョンは、次のようにクラスにカテゴリを作成することで判別できます。
UIDevice + Utilities.h
#import <UIKit/UIKit.h>
@interface UIDevice (Utilities)
- (CGFloat)deviceModelVersion;
@end
UIDevice + Utilities.m
#import "UIDevice+Utilities.h"
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (Utilities)
- (CGFloat)deviceModelVersion
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithUTF8String:machine];
free(machine);
if ([platform rangeOfString:@"iPhone"].location != NSNotFound)
{
return [[[platform stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
}
else if ([platform rangeOfString:@"iPad"].location != NSNotFound)
{
return [[[platform stringByReplacingOccurrencesOfString:@"iPad" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
}
else if ([platform rangeOfString:@"iPod"].location != NSNotFound)
{
return [[[platform stringByReplacingOccurrencesOfString:@"iPod" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
}
else if ([platform rangeOfString:@"i386"].location != NSNotFound || [platform rangeOfString:@"x86_64"].location != NSNotFound)
{
return -1.0; //Currently it is not possible (or maybe it is, but I do not know)
//which type of simulator device model version your app is running
//so I am returning -1.0 device model version for all simulators types
}
return 0.0;
}
@end
関数の呼び出し方法の例deviceModelVersion
:
CGFloat deviceModelVersion = [UIDevice currentDevice].deviceModelVersion;
考えられる結果は、1.0、1.1、...、2.0、2.1、...、3.0、3.1、..、4.0、4.1、..、5.0、5.1、..である可能性があります。
それがiPhone5であるかどうかを判断するには、
deviceModel : "iPhone"
と
deviceModelVersion : >=5.0 and < 6.0
私は実際にトリックを行う#defineを見つけました
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0f)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0f)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0f)