博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS获取设备信息和获取当前屏幕状态
阅读量:3754 次
发布时间:2019-05-22

本文共 5592 字,大约阅读时间需要 18 分钟。

  • 建议使用单利然后定义一个宏放到pch里, 这样比较方便下面是自己封装的一个类。

(获取设备信息)上代码

/* CurrentDevice.h *//* 提供两种单利创建方式 */#import 
#import
@interface CurrentDevice : NSObject+ (instancetype)sharedDeviceManager; /* 单利 */+ (instancetype)shareCurrentDevice; /* 单利 */- (id)deviceModel;/* 类型 ipad iphone ipod */- (NSString *)getDeviceVersionInfo; /* 设备信息 */- (NSString *)correspondVersion; /* 对应的设备名 iphone5 iphone5s */@end

方法实现部分

/* CurrentDevice.m文件 */#import "CurrentDevice.h"#include 
/** 需要一些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:            /* home在下 */            self.webView.frame = CGRectMake(0 , 20, WIDTH, HEIGHT - 10);            break;        case UIInterfaceOrientationPortraitUpsideDown:            /* home在上 */            self.webView.frame = CGRectMake(0, 20, WIDTH, HEIGHT- 10);            break;        case UIInterfaceOrientationLandscapeLeft:            /* home在左 */            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:            /* home在右 */            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 屏幕会翻转

转载地址:http://plvsn.baihongyu.com/

你可能感兴趣的文章
spark常见算子
查看>>
scala符号初体验
查看>>
kafka生产者常用参数含义
查看>>
mysql编写函数
查看>>
面试笔试题之hql
查看>>
sql函数之cast()
查看>>
hql中substr函数截取字符串匹配
查看>>
mysql之指定ip、用户、数据库权限
查看>>
zookeeper的读和写数据流程(有图欧)
查看>>
bin/schematool -dbType mysql -initSchema HiveMetaException: Failed to get schema version.
查看>>
flink知识总结
查看>>
flink之检查点(checkpoint)和保存点(savepoint)的区别
查看>>
Linux系统编程---进程I/O
查看>>
spring学习知识补充
查看>>
杂文之生成随机字符串
查看>>
springBoot基础(一)
查看>>
springBoot基础(二)
查看>>
在springBoot中使用Mapper类问题
查看>>
filebeat___log -input
查看>>
GitHub使用
查看>>