iOS屏幕尺寸和分辨率了解

1、截至目前为止,主流的iOS设备屏幕有以下几种:

 

---------------  iPhone  ---------- --------  iPad ------------

 

2、iOS设备屏幕分辨率:(ppi是像素密度单位【像素/英寸】,401ppi表示每英寸上有401个像素)

  

  ppi(pixel per inch)计算,以6Plus为例:

  屏幕分辨率1920 x 1080,  屏幕尺寸5.5英寸(手机屏幕对角物理线的长度),

  1920 x 1920 + 1080 x 1080 = 4852800, 开根号为:2202.907...

  2202.907 / 5.5 = 400.528 ppi, 大约就是401ppi

 

3、iOS的三种分辨率

   1)、资源分辨率:资源图片的大小,单位是像素。

   2)、设计分辨率:逻辑上的屏幕大小,单位是点。我们在Interface Builder设计器中的单位和程序代码中的单位都是设计分辨率中的“点”。

   3)、是以像素为单位的屏幕大小,所有的应用都会渲染到这个屏幕上展示给用户。

     iPhone 6 Plus和 6S Plus是最为特殊的设备,资源分辨率与屏幕分辨率的比例是1.15 : 1, 而其他的设备比例是1 : 1。不同的人群关注的分辨率也是不同的,UI设计人员主要关注的是资源分辨率,开发人员主要关注的是设计分辨率,而一般用户主要关注的屏幕分辨率。

  

 4、获取设备屏幕信息

  获取当前移动设备对象:[UIDevice currentDevice]

  UIDevice类所有信息

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIDevice : NSObject + (UIDevice *)currentDevice;@property(nonatomic,readonly,strong) NSString    *name;              // e.g. "My iPhone"
@property(nonatomic,readonly,strong) NSString    *model;             // e.g. @"iPhone", @"iPod touch"
@property(nonatomic,readonly,strong) NSString    *localizedModel;    // localized version of model
@property(nonatomic,readonly,strong) NSString    *systemName;        // e.g. @"iOS"
@property(nonatomic,readonly,strong) NSString    *systemVersion;     // e.g. @"4.0"
@property(nonatomic,readonly) UIDeviceOrientation orientation __TVOS_PROHIBITED;       // return current device orientation.  this will return UIDeviceOrientationUnknown unless device orientation notifications are being generated.

@property(nullable, nonatomic,readonly,strong) NSUUID      *identifierForVendor NS_AVAILABLE_IOS(6_0);      // a UUID that may be used to uniquely identify the device, same across apps from a single vendor.

@property(nonatomic,readonly,getter=isGeneratingDeviceOrientationNotifications) BOOL generatesDeviceOrientationNotifications __TVOS_PROHIBITED;
- (void)beginGeneratingDeviceOrientationNotifications __TVOS_PROHIBITED;      // nestable
- (void)endGeneratingDeviceOrientationNotifications __TVOS_PROHIBITED;@property(nonatomic,getter=isBatteryMonitoringEnabled) BOOL batteryMonitoringEnabled NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;  // default is NO
@property(nonatomic,readonly) UIDeviceBatteryState          batteryState NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;  // UIDeviceBatteryStateUnknown if monitoring disabled
@property(nonatomic,readonly) float                         batteryLevel NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;  // 0 .. 1.0. -1.0 if UIDeviceBatteryStateUnknown

@property(nonatomic,getter=isProximityMonitoringEnabled) BOOL proximityMonitoringEnabled NS_AVAILABLE_IOS(3_0); // default is NO
@property(nonatomic,readonly)                            BOOL proximityState NS_AVAILABLE_IOS(3_0);  // always returns NO if no proximity detector

@property(nonatomic,readonly,getter=isMultitaskingSupported) BOOL multitaskingSupported NS_AVAILABLE_IOS(4_0);@property(nonatomic,readonly) UIUserInterfaceIdiom userInterfaceIdiom NS_AVAILABLE_IOS(3_2);- (void)playInputClick NS_AVAILABLE_IOS(4_2);  // Plays a click only if an enabling input view is on-screen and user has enabled input clicks.@end

 

 ios移动设备类型枚举判断:

typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {UIUserInterfaceIdiomUnspecified = -1,UIUserInterfaceIdiomPhone NS_ENUM_AVAILABLE_IOS(3_2), // iPhone and iPod touch style UIUIUserInterfaceIdiomPad NS_ENUM_AVAILABLE_IOS(3_2), // iPad style UIUIUserInterfaceIdiomTV NS_ENUM_AVAILABLE_IOS(9_0), // Apple TV style UI
};

[UIDevice currentDevice].userInterfaceIdiom ==  UIUserInterfaceIdiomPhone  // 表示iPhone设备

[UIDevice currentDevice].userInterfaceIdiom ==  UIUserInterfaceIdiomPad     // 表示iPad设备

[UIDevice currentDevice].userInterfaceIdiom ==  UIUserInterfaceIdiomTV  // 表示Apple TV设备

[UIDevice currentDevice].userInterfaceIdiom ==  UIUserInterfaceIdiomUnspecified  // 表示未知设备

 

//示例:详细判断iPhone设备类型

//详细判断iPhone设备信息, 区分横屏和竖屏if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){//获取屏幕尺寸信息CGSize screenSize = [UIScreen mainScreen].bounds.size;//竖屏情况if (screenSize.height > screenSize.width){if (screenSize.height == 568){//iPhone 5/5S/5C (iPod / iPod touch) 等设备
            }else if (screenSize.height == 667){//iPone 6 / 6S 等设备
            }else if (screenSize.height == 736){//iPone 6 Plus / 6S Plus 等设备
            }else{//iPhone 4 / 4S 等设备
            }}//横屏情况if (screenSize.width > screenSize.height){if (screenSize.width == 568){//iPhone 5/5S/5C (iPod / iPod touch) 等设备
            }else if (screenSize.width == 667){//iPone 6 / 6S 等设备
            }else if (screenSize.width == 736){//iPone 6 Plus / 6S Plus 等设备
            }else{//iPhone 4 / 4S 等设备
            }}}

//说明:在iPad和iPhone屏幕中,一般会有状态栏、标签栏、导航栏(或工具栏)以及内容视图部分,它们的尺寸也是固定的。状态栏占20点,导航栏占44点,标签栏占49点。

 

 ppi(pixel  per  inch): 表示每英寸所包含的像素点数目,数值越高,屏幕能以更高密度显示图像

dpr(device pixel ratio): 设备像素比,设备像素 / 设备独立像素,表示设备独立像素到设备像素的转换关系

 

版权声明


作者:TDX

出处:博客园TDX的技术博客--http://www.cnblogs.com/tandaxia

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/tandaxia/p/5060123.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java死锁检测

/*** author:cp* time:2021-2-24* Description: java死锁测试* 进程id查看命令:jsp 找到对应的进程id* 通过jstack 进程id 输出死锁信息** 如何定位死循环导致的其他线程阻塞等待:* linux下top命令查看cpu使用率较高的java进程&am…

spring技术内幕——深入解析spring架构与设计原理

林纳斯托瓦兹(Linus Torvalds)说:“我从心底认为,优秀的程序员与平庸的程序员之间的区别,是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码,优秀的程序员则关注数据结构及之前的关…

部署和调优 3.4 腾讯企业邮箱免费版 未完

浏览器输入腾讯的企业邮箱官网 exmail.qq.com 点右上角的 申请开通 最下面有个 免费版 填好基本信息 根据提示验证密保邮箱 转载于:https://www.cnblogs.com/wangshaojun/p/5079304.html

前端学习(1715):前端系列javascript之页面配置

test-page.vue <template><view>test-page</view> </template><script>export default {data() {return {}},methods: {}} </script><style></style>page.json {"pages": [ //pages数组中第一项表示应用启动页&a…

03|复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

目录 为什么需要复杂度分析&#xff1f; 大 O 复杂度表示法 时间复杂度分析 几种常见时间复杂度 空间复杂度分析 为什么需要复杂度分析&#xff1f; 事后统计法&#xff1a;代码跑一遍&#xff0c;通过统计、监控&#xff0c;就能得到算法执行的时间和占用的内存大小。这种…

前端学习(1716):前端系列javascript之页面配置下

page.vue {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path" : "pages/test-page/test-page","style" : {"navigationBarTitleText":"t…

git clone 速度过慢

由于公司内网限制&#xff0c;通过git clone mybatis的源码时速度贼慢 原来的方式&#xff1a;git clone ​​​​​​​https://github.com/mybatis/mybatis-3.git 超级慢——失败 改进方式&#xff1a;git clone https://github.com.cnpmjs.org/mybatis/mybatis-3.git 贼快…

前端学习(1718):前端系列javascript之生命周期上

<script>export default {onLaunch: function() {console.log(App Launch)//登录//用户信息//存储},onShow: function() {console.log(App Show)//时间戳//计算用胡得使用时间},onHide: function() {console.log(App Hide)//应用进入后台所作得得事情},onError(e){consol…

前端学习(1720):前端系列javascript之生命周期下

page2.vue <template><view>这是page2<button type"primary" click"open">点击跳转</button></view> </template><script>export default {data() {return {}},onLoad() {console.log(page onload2)},//页面渲…

06 | 链表(上):如何实现LRU缓存淘汰算法?

缓存 作用 缓存是一种提高数据读取性能的技术&#xff0c;在硬件设计、软件开发中都有着非常广泛的应用&#xff0c;比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。 淘汰策略 常见的策略有三种&#xff1a;先进先出策略 FIFO&#xff08;First In&#xff0c;First Ou…

C++处理一个动态规划的问题

嗯哼&#xff0c;别人问的问题&#xff0c;看的我也头晕&#xff0c;百度了一下动态规划&#xff0c;看了看才想起来该怎么做&#xff0c;今天写了写代码&#xff0c;实现了~ 要求是递归&#xff0c;动态规划&#xff0c;想了想这种方法也是最简单的~ 所谓动态规划&#xff1a;…

07 | 链表(下):如何轻松写出正确的链表代码?

目录 技巧一&#xff1a;理解指针或者引用的含义 技巧二&#xff1a;警惕指针丢失和内存泄漏 技巧三&#xff1a;利用哨兵简化实现难度 技巧四&#xff1a;重点留意边界条件处理 技巧五&#xff1a;举例画图&#xff0c;辅助思考 技巧六&#xff1a;多写多练&#xff0c;…

【转】成为Java顶尖程序员 ,看这10本书就够了

“学习的最好途径就是看书“&#xff0c;这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处&#xff1a; 1.能出版出来的书一定是经过反复的思考、雕琢和审核的&#xff0c;因此从专业性的角度来说&#xff0c;一本好书的价值远超其他资料2.对着书上的…

08 | 栈:如何实现浏览器的前进和后退功能?

栈 后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。栈是一种“操作受限”的线性表&#xff0c;只允许在一端插入和删除数据。 为什么要使用到“栈”这种操作受限的数据结构&#xff1f; 事实上&#xff0c;从功能上来说&#xff0c;数组或链表确实可…

09 | 队列:队列在线程池等有限资源池中的应用

队列定义 先进者先出&#xff0c;这就是典型的“队列”。队列跟栈一样&#xff0c;也是一种操作受限的线性表数据结构。 顺序队列和链式队列 顺序队列&#xff1a;用数组实现的队列// 用数组实现的队列 public class ArrayQueue {// 数组&#xff1a;items&#xff0c;数组大…

PICT实现组合测试用例

成功安装后&#xff0c;在命令行中输入命令pict&#xff1a; 可以看到pict命令的一些选项&#xff1a;/o:N 组合数&#xff0c;默认值为2&#xff0c;即pict生成的测试用例集中每条测试数据会有两个值与其他测试集是不同的&#xff1b;/d:C 值与值之间的分隔符&#xff0c;…

10 | 递归:如何用三行代码找到“最终推荐人”?

什么是递归&#xff1f; 递归是一种应用非常广泛的算法&#xff08;或者编程技巧&#xff09;。很多数据结构和算法的编码实现都要用到递归&#xff0c;比如 DFS 深度优先搜索、前中后序二叉树遍历等等。 去的过程叫“递”&#xff0c;回来的过程叫“归” 场景 周末你带着女…

前端学习(1723):前端系列javascript之uniapp语法下

<template><view><view v-if"show">uniapp</view><view>geyao</view><view v-for"item in items">{{item}}</view><view v-on:click"onClick(uni-app)">点击</view></view> …

瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士联手,搞不定弹出广告 amp; 恶意广告图标...

一位网友说他的电脑近期出了问题&#xff1a;开机后桌面和任务栏上的高速启动栏会出现恶意图标。删除了下次开机又会出现&#xff1b;使用电脑过程中每分钟都会弹出广告。他为电脑安装了瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士。以及广告神盾&#xff0c;都不能解决…