A 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]  

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

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

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

对于scale属性需要做进一步的说明:

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

scale属性的值有两个:

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

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

判断屏幕类型:

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

    float scale = [[UIScreen mainScreen] scale];  

    if (scale == ) {  

        bIsRetina = NO;  

        NSLog(@"普通屏幕");  

    }else if (scale == ) {  

        bIsRetina = YES;  

        NSLog(@"视网膜屏幕");  

    }else{  

        NSLog(@"unknow screen mode !");  

    }  

对dpi和ppi的理解:

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

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

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

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

[[UIScreen mainScrenn] scale]

什么是分辨率?不然我们先来看一张图。 

[[UIScreen mainScreen] scale]是计算屏幕分辨率的。

[[UIScreen main] scale] == ; //代表320 x 480 的分辨率
[[UIScreen main] scale] == ; //代表640 x 960 的分辨率
[[UIScreen main] scale] == ; //代表1242 x 2208 的分辨率

iOS - UIScreen的 bound、frame、scale属性的更多相关文章

  1. UIScreen的 bound、frame、scale属性

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

  2. ios 中直接修改frame里边某个属性的简便方法

    参考:http://www.cnblogs.com/wengzilin/p/4359865.html 在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候.我们知道,正常情况下我们无法 ...

  3. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  4. iOS UIView 快速修改 frame,

    在iOS开发布局修改 frame 时需要繁琐的代码实现,今天偶尔看到一播客说到快速修改的 frame 的方法,自己动手写了一遍实现代码. 快速实现主要通过 添加类目的方式,对UIView 控件添加了一 ...

  5. IOS 杂笔-19(属性与变量的优缺点)

    IOS 杂笔-19(属性与变量的优缺点) 在前面的文章中我介绍了属性与变量的区别.这篇博客我将会简单介绍一下属性与变量的优缺点. 变量 优点: 访问速度快 缺点: 使用不灵活 属性 缺点: 耗时 优点 ...

  6. iOS对UIViewController生命周期和属性方法的解析

    目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实 ...

  7. 【iOS开发】iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...

  8. ios jquery css('left')无法读取属性解决的方法

    ios jquery css('left')无法读取属性解决的方法 <pre>$(this).position().left因为display:none状态下是读取不了 $(this).o ...

  9. iOS学习笔记:frame,bound,center, anchorPoint

    frame: View在它的Super View坐标系里的坐标 bound: 用来定义View自身坐标系和边界的Rect,Rect的原点表示View自身坐标系的原点坐标.举个例子: 一般情况下boun ...

随机推荐

  1. windows下nvm安装node之后npm命令找不到问题解决办法

    主要关键解解决办法:===>>适用于所有东西的安装 安装有关环境配置类的软件及其他,一般情况下切记不要安装到c盘programfiles下,否则会出现各种问题的报错!!!切记! nvm安装 ...

  2. UGUI优化

    https://zhuanlan.zhihu.com/p/21913747 https://www.jianshu.com/p/3edce67cb473 http://www.ceeger.com/f ...

  3. jenkins 神奇变量

    Hudson自己设置的一些环境变量可用于通过Hudson来执行shell脚本.Windows批处理文件和Ant文件,他们包括 Hudson设置环境变量 当一个Hudson作业执行时,它会设置一些环境变 ...

  4. django test模块

    今天试了试django自带的test模块,断点执行到一下代码中时发现一点儿小问题: def _create_test_db(self, verbosity, autoclobber): "& ...

  5. Android开发学习笔记-SharedPreferences的用法

    SharedPreferences介绍:   做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等 ...

  6. PHP的五大阶段

    PHP程序员必须懂前端,后端,数据库,服务器.具体的学习顺序是: 第一阶段:扫盲.了解什么是B/S模式,原理上知道从浏览器输入一个url是如何获取到信息的流程.熟悉html,能快速地用div+css写 ...

  7. 爬豆瓣影评,记下解决maximum recursion depth exceeded in cmp

    #主要是爬取后给别人做自然语言分析,没其他意思. #coding=utf8 import requests,re from lxml import etree import sys reload(sy ...

  8. JS匿名函数理解

    匿名函数的基本形式为(function(){...})(); 前面的括号包含函数体,后面的括号就是给匿名函数传递参数并立即执行之 匿名函数的作用是避免全局变量的污染以及函数名的冲突   1.小括号的作 ...

  9. js获取视频截图

    参考:https://segmentfault.com/q/1010000006717959问题:a.获取的好像是第一帧的图?第一帧为透明图时,获取的个透明图片b.得先加载视频到video,做视频上传 ...

  10. Python中的类(下)

    本文将介绍一下类的构造函数和初始化函数,以及如何通过"魔术方法"定制一个类. 类构造和初始化 在前面的文章中,经常使用初始化函数"__init__",下面看看& ...