来自 UIImage 参考:
@property(nonatomic, readonly) CGSize size
图像的尺寸,考虑到方向。
讨论
在 iOS 4.0 及更高版本中,该值反映了图像的逻辑大小,以磅为单位。在 iOS 3.x 及更早版本中,此值始终反映以像素为单位测量的图像尺寸。
iOS中的像素和点有什么区别?
iOS 上的像素是设备的全分辨率,这意味着如果我的图像长度为 100x100 像素,那么手机将在标准的非视网膜设备上将其渲染为 100x100 像素。但是,由于较新的 iPhone 具有四倍的像素密度,因此相同的图像将以 100x100 像素呈现,但看起来只有该尺寸的一半。iOS 工程师很久以前就解决了这个问题(早在 OS X 中使用 Quartz),当时他们引入了 Core Graphics 的点系统。一个点是标准长度,在非视网膜设备上相当于 1x1 像素,在视网膜设备上相当于 2x2 像素。这样,您的 100x100 图像将在 Retina 设备上呈现两倍的大小,并且基本上可以使用户看到的内容正常化。
它还在 iOS 设备上提供了一个标准的测量系统,因为无论像素密度如何变化,iPhone 屏幕上始终存在 320x480 点,iPad 屏幕上始终存在 768x1024 点。*
但与此同时,考虑到视网膜设备至少是随 iOS 4 一起引入的,你基本上可以忽略文档,而且我不知道有多少人仍在更新的 iPhone 上运行 iOS 3。但是,如果出现这种情况,您的 UIImage 将需要在视网膜 iPhone 上以像素的两倍尺寸进行渲染,以弥补像素密度差异。
*从 iPhone 5 开始,iPhone 的尺寸不再标准化。请使用适当的 API 来检索屏幕的尺寸或使用布局约束。
使用来自http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions的数据,我设置了公式 sqrt(pointWidth^2+pointHeight^2)/diagonalInches 来计算每部手机显示的点数每英寸。
结果:
iPhone 2G、3G、3GS、4、4s = 164.825201164068082 点每英寸
iPhone 5、5s = 162.9846618550346903
iPhone 6 = 162.8061416117083255
iPhone 6 Plus = 153.535954278463216
正如你所知道的,每部手机上的一个点的大小大致相同。使用相同的网页,您可以使用像素值设置相同的公式,并且您会注意到由于较新手机的像素密度更高而导致的较大不规则性。