iOS获取设备信息和获取当前屏幕状态

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

(获取设备信息)上代码

/* CurrentDevice.h */
/* 提供两种单利创建方式 */
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@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 <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:
            /* 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 屏幕会翻转
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值