- 建议使用单利然后定义一个宏放到pch里, 这样比较方便下面是自己封装的一个类。
(获取设备信息)上代码
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface CurrentDevice : NSObject
+ (instancetype)sharedDeviceManager;
+ (instancetype)shareCurrentDevice;
- (id)deviceModel;
- (NSString *)getDeviceVersionInfo;
- (NSString *)correspondVersion;
@end
方法实现部分
#import "CurrentDevice.h"
#include <sys/sysctl.h> /** 需要一些c的东西 要引用这个 */
@implementation CurrentDevice
+ (instancetype)shareCurrentDevice {
static CurrentDevice *currentDevice = nil;
if (currentDevice == nil) {
currentDevice = [[CurrentDevice alloc] init];
}
return currentDevice;
}
+ (instancetype)sharedDeviceManager {
static CurrentDevice *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
- (id)deviceModel {
NSString *deviceModel = [UIDevice currentDevice].model;
return deviceModel;
}
- (NSString *)getDeviceVersionInfo {
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithFormat:@"%s", machine];
free(machine);
return platform;
}
- (NSString *)correspondVersion {
NSString *correspondVersion = [self getDeviceVersionInfo];
if ([correspondVersion isEqualToString:@"i386"]) return@"Simulator";
if ([correspondVersion isEqualToString:@"x86_64"]) return @"Simulator";
if ([correspondVersion isEqualToString:@"iPhone1,1"]) return@"iPhone 1";
if ([correspondVersion isEqualToString:@"iPhone1,2"]) return@"iPhone 3";
if ([correspondVersion isEqualToString:@"iPhone2,1"]) return@"iPhone 3S";
if ([correspondVersion isEqualToString:@"iPhone3,1"] || [correspondVersion isEqualToString:@"iPhone3,2"]) return@"iPhone 4";
if ([correspondVersion isEqualToString:@"iPhone4,1"]) return@"iPhone 4S";
if ([correspondVersion isEqualToString:@"iPhone5,1"] || [correspondVersion isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([correspondVersion isEqualToString:@"iPhone5,3"] || [correspondVersion isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
if ([correspondVersion isEqualToString:@"iPhone6,1"] || [correspondVersion isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
if ([correspondVersion isEqualToString:@"iPod1,1"]) return@"iPod Touch 1";
if ([correspondVersion isEqualToString:@"iPod2,1"]) return@"iPod Touch 2";
if ([correspondVersion isEqualToString:@"iPod3,1"]) return@"iPod Touch 3";
if ([correspondVersion isEqualToString:@"iPod4,1"]) return@"iPod Touch 4";
if ([correspondVersion isEqualToString:@"iPod5,1"]) return@"iPod Touch 5";
if ([correspondVersion isEqualToString:@"iPad1,1"]) return@"iPad 1";
if ([correspondVersion isEqualToString:@"iPad2,1"] || [correspondVersion isEqualToString:@"iPad2,2"] || [correspondVersion isEqualToString:@"iPad2,3"] || [correspondVersion isEqualToString:@"iPad2,4"]) return@"iPad 2";
if ([correspondVersion isEqualToString:@"iPad2,5"] || [correspondVersion isEqualToString:@"iPad2,6"] || [correspondVersion isEqualToString:@"iPad2,7"] ) return @"iPad Mini";
if ([correspondVersion isEqualToString:@"iPad3,1"] || [correspondVersion isEqualToString:@"iPad3,2"] || [correspondVersion isEqualToString:@"iPad3,3"] || [correspondVersion isEqualToString:@"iPad3,4"] || [correspondVersion isEqualToString:@"iPad3,5"] || [correspondVersion isEqualToString:@"iPad3,6"]) return @"iPad 3";
return correspondVersion;
}
@end
- 这里给一个写好的宏, 如果工程写了PCH文件的话直接放在PCH 里, 如果没写, 在哪里需要获取设备信息就在那个页面引用即可。
#import "CurrentDevice.h"
#define DEVICEMODEL [[CurrentDevice shareCurrentDevice] deviceModel]
#define DEVICEMODEL_t [[CurrentDevice sharedDeviceManager] deviceModel]
#define DEVICEINFO [[CurrentDevice shareCurrentDevice] getDeviceVersionInfo]
#define CORRESPONDVERSION [[CurrentDevice shareCurrentDevice] correspondVersion]
获取当前屏幕状态
- 直接给方法了, 这个比较简单 根据home键位置判断当前屏幕状态给出对应才做
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
switch (interfaceOrientation) {
case UIInterfaceOrientationPortrait:
self.webView.frame = CGRectMake(0 , 20, WIDTH, HEIGHT - 10);
break;
case UIInterfaceOrientationPortraitUpsideDown:
self.webView.frame = CGRectMake(0, 20, WIDTH, HEIGHT- 10);
break;
case UIInterfaceOrientationLandscapeLeft:
if ([DEVICEMODEL isEqualToString:@"iPad"]) {
self.webView.frame = CGRectMake(0 , 20, WIDTH, HEIGHT - 10);
} else {
self.webView.frame = CGRectMake(0 , 0, WIDTH, HEIGHT);
}
break;
case UIInterfaceOrientationLandscapeRight:
if ([DEVICEMODEL isEqualToString:@"iPad"]) {
self.webView.frame = CGRectMake(0 , 20, WIDTH, HEIGHT - 10);
} else {
self.webView.frame = CGRectMake(0 , 0, WIDTH, HEIGHT);
}
break;
default:
break;
}
}
- 注意: 如果设备是iphone 程序不会走判断中的UIInterfaceOrientationPortraitUpsideDown 屏幕会保持之前的状态
- 如果是ipad 屏幕会翻转