【iOS】UIScreen && UIDevice学习记录

UIScreen object contains the bounding rectangle of the device’s entire screen. When setting up your application’s user interface, you should use the properties of this object to get the recommended frame rectangles for your application’s window.

UIScreen对象包含了整个屏幕的边界矩形。当构造应用的用户界面接口时,你应该使用该对象的属性来获得推荐的矩形大小,用以构造你的程序窗口。

以下列出的属性和操作是我用过的。

        + mainScreen         Returns the screen object representing the device’s screen.
  •    bounds  property    Contains the bounding rectangle of the screen, measured in points. (read-only)
  •    applicationFrame  property  The frame rectangle for the app window. (read-only)
  •    scale  property   The natural scale factor associated with the screen. (read-only)

[plain]  view plain copy
  1. CGRect bound = [[UIScreen mainScreen] bounds];  // 返回的是带有状态栏的Rect  
  2. CGRect frame = [[UIScreen mainScreen] applicationFrame];  // 返回的是不带有状态栏的Rect  
  3. float scale = [[UIScreenmainScreen] scale]; // 得到设备的自然分辨率  
对于scale属性需要做进一步的说明:

    以前的iphone 设备屏幕分辨率都是320*480,后来apple 在iPhone 4中采用了名为Retina的显示技术,iPhone 4采用了960x640像素分辨率的显示屏幕。由于屏幕大小没有变,还是3.5英寸,分辨率的提升将iPhone 4的显示分辨率提升至iPhone 3GS的四倍,每英寸的面积里有326个像素

scale属性的值有两个:

scale = 1; 的时候是代表当前设备是320*480的分辨率(就是iphone4之前的设备)

scale = 2; 的时候是代表分辨率为640*960的分辨率


判断屏幕类型:

[plain]  view plain copy
  1. // 判断屏幕类型,普通还是视网膜  
  2.     float scale = [[UIScreen mainScreen] scale];  
  3.     if (scale == 1) {  
  4.         bIsRetina = NO;  
  5.         NSLog(@"普通屏幕");  
  6.     }else if (scale == 2) {  
  7.         bIsRetina = YES;  
  8.         NSLog(@"视网膜屏幕");  
  9.     }else{  
  10.         NSLog(@"unknow screen mode !");  
  11.     }  

对dpi和ppi的理解:

DPI是每英寸的点数,可以简单理解为点的密度。

PPI是每英寸的像素数,可以简单理解为像素密度。

点和像素有区别吗?很多时候,一个点 = 一个像素。但是,并不尽然,如iPhone的视网膜屏幕,它一个点包含了四个像素,大大提高了显示清晰度。

使用UIScreen获取的bounds和frame,都是点的尺寸,而非像素尺寸。例如,在视网膜屏的iPhone4上,我获取的applicationFrame大小是320x460,很明显它代表的是点的数量。假如你要显示一张图,如果该图原大小是100x200,那么显示在这样的屏幕上,它的实际显示出来的尺寸将只有原来大小的一半,但它的像素数并未改变。更加需要考虑的是,如果你要对这张图进行缩放,那么缩放率该按照实际显示尺寸计算,还是按照实际像素数计算?这一块很重要,曾走了不少弯路,答案是前者。




顾名思义,我们很容易知道UIDevice的代表了一个设备,为我们提供设备相关的一些信息,现列举如下:

[plain]  view plain copy
  1. //设备相关信息的获取  
  2. NSString *strName = [[UIDevicecurrentDevice] name];  
  3. NSLog(@"设备名称:%@", strName);  
  4.       
  5. NSString *strId = [[UIDevicecurrentDevice] uniqueIdentifier];  
  6. NSLog(@"设备唯一标识:%@", strId);  
  7.       
  8. NSString *strSysName = [[UIDevicecurrentDevice] systemName];  
  9. NSLog(@"系统名称:%@", strSysName);  
  10.       
  11. NSString *strSysVersion = [[UIDevicecurrentDevice] systemVersion];  
  12. NSLog(@"系统版本号:%@", strSysVersion);  
  13.       
  14. NSString *strModel = [[UIDevicecurrentDevice] model];  
  15. NSLog(@"设备模式:%@", strModel);  
  16.       
  17. NSString *strLocModel = [[UIDevicecurrentDevice] localizedModel];  
  18. NSLog(@"本地设备模式:%@", strLocModel);  
  19.       
  20. float version = [[[UIDevicecurrentDevice] systemVersion]floatValue];  
  21. NSLog(@"版本号:%f\n", version);  
以下是在我的iPhone4上取得的结果:


以下是我在iPad模拟器上取得的结果:


判断设备型号:

[plain]  view plain copy
  1. -(NSString*)deviceString  
  2. {  
  3.     // 需要 #import "sys/utsname.h"  
  4.     struct utsname systemInfo;  
  5.     uname(&systemInfo);  
  6.     NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];  
  7.       
  8.     if ([deviceString isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";  
  9.     if ([deviceString isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";  
  10.     if ([deviceString isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";  
  11.     if ([deviceString isEqualToString:@"iPhone3,1"])    return @"iPhone 4";  
  12.     if ([deviceString isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";  
  13.     if ([deviceString isEqualToString:@"iPhone5,2"])    return @"iPhone 5";  
  14.     if ([deviceString isEqualToString:@"iPhone3,2"])    return @"Verizon iPhone 4";  
  15.     if ([deviceString isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";  
  16.     if ([deviceString isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";  
  17.     if ([deviceString isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";  
  18.     if ([deviceString isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";  
  19.     if ([deviceString isEqualToString:@"iPad1,1"])      return @"iPad";  
  20.     if ([deviceString isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";  
  21.     if ([deviceString isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";  
  22.     if ([deviceString isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";  
  23.     if ([deviceString isEqualToString:@"i386"])         return @"Simulator";  
  24.     if ([deviceString isEqualToString:@"x86_64"])       return @"Simulator";  
  25.     NSLog(@"NOTE: Unknown device type: %@", deviceString);  
  26.     return deviceString;  
  27. }  

根据设备模式,判断设备类型(例如,是iPhone或是iPad)

[plain]  view plain copy
  1. -(Boolean)checkDevice:(NSString*)name  
  2. {  
  3.     NSString* deviceType = [UIDevice currentDevice].model;  
  4.     NSRange range = [deviceType rangeOfString:name];  
  5.     return range.location != NSNotFound;  
  6. }  
[plain]  view plain copy
  1. NSString * checkStr = @"iPhone";// 改为iPadze判断是否iPad  
  2. Boolean bcheck =[self  checkDevice:checkStr];// 返回为YES表示是iPhone  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值