1:iPhone尺寸规格

尺寸表格:1 inch(英寸) = 2.54cm = 25.4mm

2:屏幕尺寸

我们通常所说的iPhone5屏幕尺寸为4英寸、iPhone6屏幕尺寸为4.7英寸,指的是显示屏对角线的长度(diagonal)

屏幕尺寸:对角线

3:像素密度PPI

PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目。

PPI数值越高,代表显示屏能够以越高的密度显示图像,即通常所说的分辨率越高、颗粒感越弱。

物理尺寸(对角线长度)

像素尺寸(像素总量)

根据勾股定理

iPhone4(s)的PPI计算公式为:

计算结果稍有出入,这是因为像素的离散采样有锯齿效应。

4:缩放因子(scale factorbetween logic point and device pixel)

(1)Scale起源

早期的iPhone3GS的屏幕分辨率是320*480(PPI=163),iOS绘制图形(CGPoint/CGSize/CGRect)均以point为单位(measured in points):1 point = 1 pixel(Point Per Inch=Pixel Per Inch=PPI)

后来在iPhone4中,同样大小(3.5 inch)的屏幕采用了Retina显示技术,横、纵向方向像素密度都被放大到2倍,像素分辨率提高到(320x2)x(480x2)= 960x640(PPI=326), 显像分辨率提升至iPhone3GS的4倍(1个Point被渲染成1个2x2的像素矩阵)。但是对于开发者来说,iOS绘制图形的API依然沿袭point(pt,注意区分印刷行业的“磅”)为单位。

在同样的逻辑坐标系下(320x480):1 point = scale*pixel

(在iPhone4~6中,缩放因子scale=2;在iPhone6+中,缩放因子scale=3)。

结论:scale=绝对长度比(point/pixel)=单位长度内的数量比(pixel/point)

(2)UIScreen.scaleUIScreen.h

@property(nonatomic,readonly)CGFloatscaleNS_AVAILABLE_IOS(4_0);

为了自动适应分辨率,系统会根据设备实际分辨率,自动给UIScreen.scale赋值,该属性对开发者只读。

(3)UIScreen.nativeScale(iOS8新增了nativeScale属性:nativeScale与scale没有太大区别)@property(nonatomic,readonly)CGFloatnativeScaleNS_AVAILABLE_IOS(8_0);

(4)机型判别

在同样的逻辑分辨率下,可以通过scale参数识别是iPhone3GS还是iPhone4(s)。以下基于nativeScale参数,定义了探测机型是否为iPhone6+的宏// not UIUserInterfaceIdiomPad

#defineIS_IPHONE(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)// detect iPhone6 Plus based on its native scale

#defineIS_IPHONE_6PLUS(IS_IPHONE && [[UIScreenmainScreen] nativeScale] == 3.0f)

--------------------------------------------------------------------------------那么,同样的分辨率和scale,如何区分机型iPhone4与4s、iPhone5与5s呢?通过[[UIDevice currentDevice] model]只能判别iPhone、iPad、iPod大类,要判断iPhone具体机型型号,则需要通过sysctlbyname("hw.machine")获取详细的设备参数信息予以甄别。

5:@2x @3x及高倍图适配

(1)@2x

iPhone3GS时代,我们为一个应用提供图标(或按钮提供贴图),只需要icon.png。针对现在的iPhone4~6 Retina显示屏,需要制作额外的@2x高分辨率版本。例如在iPhone3GS中,scale=1,用的图标 50x50pixel(logicalimage.size=50x50point);在iPhone4~6中,scale=2,则需要100×100pixel(logical image.size=50x50point,乘以image.scale=dimensions in pixels),并且命名为icon@2x.png。

如果APP要同时兼容iPhone3GS~iPhone6,则需要提供icon.png/icon@2x.png两种分辨率的图片。

(2)@3x

Phone6+在实际渲染时,downsampling/1.15(1242x2208->1080x1920),准确的讲,应该是@2.46x。苹果为方便开发者用的是@3x的素材,然后再缩放到@2.46x上。如果APP要同时兼容iPhone3GS~iPhone6+,则需要提供icon.png/icon@2x.png/icon@3x.png三种分辨率的图片。需要注意的是,iOS APP图标的尺寸和命名都需要遵守相关规范。

(3)加载图片的方式

<1>+imageNamed:

该方法使用系统缓存,适合表视图重复加载图像的情形。同时该API根据UIScreen的scale,自动查找包含对应高倍图后缀名(@2x)的文件,如果找到二倍图,则image.scale=2.0,对应逻辑size大小以point度量(pixel度量的一半);如果没找到设置默认image.scale=1.0,对应逻辑size大小同像素尺寸。因此,使用该方法,无需特意指定高倍图后缀。在实际运行时,系统如果发现当前设备是Retina屏(scale=2),会自动寻找"*@2x.png"命名格式的图片,加载针对Retina屏的图片素材,否则会失真。

<2>+imageWithContentsOfFile

+imageWithData:(scale:)

-initWithContentsOfFile:

-initWithData:(scale:)

这组方法创建的UIImage对象没有使用系统缓存,并且指定文件名必须包含明确的高倍图后缀。如果文件名包含@2x后缀,则image.scale=2.0;否则默认image.scale=1.0,同样对于Retina屏将会失真。

<3>目前,适配iPhone6+时,除了一些铺满全屏的大图(LogoIcon、LaunchImage)需提供三倍图,其他的小图仍可沿用原有的二倍图自适应拉伸。

6:Screen Bounds  &  Application Frame

(1) UIScreen.bounds// Bounds of entire screen in points(本地坐标系,起点为[0,0])

@property(nonatomic,readonly)CGRectbounds;

//考虑 转屏的影响,按照实际屏幕方向(UIDevice  Orientation)的宽高#defineSCREEN_WIDTH([UIScreenmainScreen].bounds.size.width)

#defineSCREEN_HEIGHT([UIScreenmainScreen].bounds.size.height)

#defineSTATUSBAR_HEIGHT([UIApplicationsharedApplication].statusBarFrame.size.height)

//不考虑转屏的影响,只取竖屏(UIDevice OrientationPortrait)的宽高#defineSCREEN_WIDTH  MIN([UIScreen mainScreen].bounds.size.width, [UIScreenmainScreen].bounds.size.height)

#defineSCREEN_HEIGHT  MAX([UIScreen mainScreen].bounds.size.height      [UIScreenmainScreen].bounds.size.width)

#defineSTATUSBAR_HEIGHT MIN([UIApplicationsharedApplication].statusBarFrame.size.width,

[UIApplicationsharedApplication].statusBarFrame.size.height)

7:机型尺寸适配(Screen Scale Adaption)

待续

ios 更新尺寸调用什么方法_iOS开发:iPhone尺寸和适配相关推荐

  1. ios 更新尺寸调用什么方法_iOS开发经验总结(上)

    来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...

  2. pubg国服服务器维修怎么解决 ios,刺激战场ios更新不了解决方法_绝地求生刺激战场ios更新不了怎么办_4月25日刺激战场ios更新后进不去_9号资讯...

    第 2 页 刺激战场ios更新不了解决方法 解决方法一 点击苹果商店右下角的[更新],在[待更新项目]中直接点击更新,玩家不必进入游戏,直接到苹果商店里面进行更新即可.若依然无法更新,可尝试解决方法二 ...

  3. 更新尺寸调用什么方法_Java 多线程启动为什么调用 start() 方法而不是 run() 方法?...

    多线程在工作中多多少少会用到,启动 多线程调用的是 start() 方法,而不是 run() 方法,这是为什么呢? 在探讨这个问题之前,先来了解(复习)一些多线程的基础知识~ 线程的状态 Java 中 ...

  4. ios和平精英更新显示无法连接服务器,和平精英ios更新不了怎么办 ios更新不了解决方法...

    和平精英ios更新不了怎么办?很多IOS玩家在更新时遇到更新不了或者更新慢的情况,那么这样怎么解决呢?以下是小编为大家整理的解决方法,来了解一下吧. 网络问题 建议切换成无线网络,然后退出游戏后重新进 ...

  5. ios 持续获取定位 高德地图_iOS开发-- 高德地图的接入使用(1)定位

    单次定位 @property(nonatomic,strong)AMapLocationManager * locationManager;// 开启定位 // 懒加载创建你的定位的Manager - ...

  6. ios 如何在cell中去掉_iOS开发:关于 去除UITableViewCell复用机制 的几种方法

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击 ...

  7. ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  8. ios王者荣耀服务器维护31号,王者荣耀3月31日IOS无法更新什么情况?王者荣耀ios更新特别慢解决方法...

    3月31日王者荣耀ios版更新不了怎么办?王者荣耀ios版每次大版本更新的时候总是会比安卓版出现更多的问题,比较的常见的就是更新失败,更新很卡,或者是没有出现更新按钮等等问题,这不今天的大版本更新又遇 ...

  9. ios 仿电脑qq登录界面_iOS开发UI篇—模仿ipad版QQ空间登录界面

    iOS开发UI篇-模仿ipad版QQ空间登录界面 一.实现和步骤 1.一般ipad项目在命名的时候可以加一个HD,标明为高清版 2.设置项目的文件结构,分为home和login两个部分 3.登陆界面的 ...

最新文章

  1. c++ 虚函数_到底什么情况下会合成默认构造函数?
  2. 【思维导图总结——数据库系统概论】关系数据库标准语言SQL
  3. 【Python】5种基本但功能非常强大的可视化类型
  4. 深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇...
  5. 动态规划C语言实现之最长公共子序列(LCS)
  6. Disk Drill Enterprise for Mac(数据恢复软件)
  7. linux源码中的核心数据结构
  8. 考PRINCE2有用么?
  9. ECharts 全新大版本 4.0 正式发布
  10. python flask服务器_flask应用部署到服务器
  11. 操作系统的工作流程(流程图表示)
  12. c#中文字大全,转换为字符串格式
  13. 电商行业分析指标体系拆解下钻
  14. CAN接受和发送失败的原因有哪些---之前调试MCP2515驱动时,数据一直发不出去,三个发送邮箱都被占满.至今未解决,读寄存器-总线错误
  15. C# 和EmguCV
  16. 《C++ 黑客编程揭秘与防范(第2版)》—第6章6.2节详解PE文件结构
  17. Transformers for 1D signals in Parkinson’s disease detection from gait
  18. 简述什么是图灵机_带你深入理解图灵机--什么是图灵机、图灵完备
  19. 《代码整洁之道》——(5)对象和数据结构
  20. 管理综合类(二)稻盛和夫《阿米巴经营模式》、《干法》、《活法》等等

热门文章

  1. Linux arm 内核选项和busybox选项 加载tun模块 -- 创建/dev/tun 字符设备
  2. 一站式开发一个安卓APP-原型设计篇
  3. CakePHP 概览
  4. Win11怎么恢复传统右键菜单?Win11右键改回传统模式的方法
  5. 有剩余空间为何不能复制文件?
  6. 5G NR 阅读笔记
  7. Linux常用命令(4)-磁盘管理
  8. 使用PQmagic磁盘分区大师导致磁盘文件丢失
  9. 地表温度LST计算教程
  10. U880纯GPS定位综合解决方案,支持谷歌地图老虎地图百度地图