从事Mac、ios开发的小伙伴在刚开始入手的时候,可能都遇到过文本UI或者image显示模糊的情况。最简单的原因是它们被绘制在了浮点数的坐标上,导致像素显示模糊。那么为什么绘制在浮点数的坐标上就会显示模糊呢?
首先要知道像素,像素是影像显示的基本单位,用Pixel表示。每个像素不是一个点或者一个方块,而是一个抽象的取样,只是在很多情况下,它们采用点或者方块显示。图片是一个个取样点的集合。
以mac为例,绘图系统使用的尺寸单位为Point,而我们的屏幕显示单位是像素。对于绘图本身,并不需要关心如何在屏幕上显示,(显示属于硬件细节),系统根据当前屏幕的情况自动将Point转成像素,所以不管在什么样的屏幕上显示,就是系统的问题了,使用Point绘图以不变应万变。
exp:
-
非 Retina:1 Point = 1 x 1 Pixel
-
Retina:1 Point = 2 x 2 Pixel
所以浮点数的Point对应的是一些不完整的取样点的集合,导致UI显示模糊,这是内部原因。那又有哪些外部原因导致UI显示模糊呢?
系统通过一个变量来表示上边例子中的映射关系,这就是NSScreen中backingScaleFactor属性的作用,例如Retina屏幕,backingScaleFactor的值是2。
在Mac中,想到视图一定是NSView及其子类,NSView本身并不负责显示,从NSView和NSResponder继承中可以看出,NSView的主要任务是响应触摸实践,NSView通过组合,将责任