关于UIScreen的 bound、frame、scale属性

1.UIScreen的介绍

UIScreen对象包含了整个屏幕的边界矩形。

当构造应用的用户界面接口时,你应该使用该对象的属性来获得推荐的矩形大小,用以构造你的程序窗口。

2.UIScreen的一些操作:

1.CGRect bound = [[UIScreen mainScreen] bounds];  // 返回的是带有状态栏的Rect  

2.CGRect frame = [[UIScreen mainScreen] applicationFrame];  // 返回的是不带有状态栏的Rect  

3.float scale = [[UIScreenmainScreen] scale]; // 得到设备的自然分辨率 

4.[UIScreen mainScreen]// 返回的是手机屏幕(UIScreen)

5.[UIScreen screens] //返回的包含屏幕此存信息的数组.

3.UIScreen的一些注意点:

注意点 1:

       bounds就是屏幕的全部区域,
       applicationFrame就是app显示的区域,不包含状态栏(高度20,如果状态栏隐藏的话,那么,这个结果就和bounds一样了)

       [[UIScreen mainScreen] bounds] 和[UIScreen mainScreen] applicationFrame]的区别

   打印结果:

  

注意点2:

      [UIScreen mainScreen] 与 [UIScreen screens] 二者的打印结果相同:


这说明UIScreen 本质上还是数组

注意点3:

        scale属性的值有三个

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

                          scale = 2; 的时候是代表当前设备是640*960的分辨率(就是iphone4到iPhone6s之间的设备)

                          scale = 3; 的时候是代表但前设备是960*1440的分辨率(就是iPhone6plus之后的设备)

以前的iphone 设备屏幕分辨率都是320*480,后来apple 在iPhone 4中采用了名为Retina的显示技术,iPhone 4采用了960x640像素分辨率的显示屏幕。

由于屏幕大小没有变,还是3.5英寸,分辨率的提升将iPhone 4的显示分辨率提升至iPhone 3GS的四倍,每英寸的面积里有326个像素。

         关于判断屏幕类型:

        // 判断屏幕类型,普通还是视网膜  

            float scale = [[UIScreen mainScreen] scale];  

                 if (scale == 1) {  

                       bIsRetina = NO;  

                       NSLog(@"普通屏幕");  //@1X

            }else if (scale == 2) {  

                      bIsRetina = YES;  

                      NSLog(@"视网膜屏幕");  //@2X

            }else{  

                     NSLog(@"Retina HD高清显示屏");  //@3X
    }

          对dpi和ppi的理解:

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

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

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

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




      


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值