从技术上讲,x、y、宽度和高度表示一组与像素相关的维度。我不能有 200.23422 像素那么为什么他们使用浮点数而不是整数?
3 回答
浮点数的原因是现代 CPU 和 GPU 经过优化,可以并行处理许多浮点数。iOS 和 Mac 都是如此。
使用 Quartz,您无需处理单个像素,但您绘制的所有内容始终是抗锯齿的。当您有一个坐标 1.0, 1.0 时,这实际上为坐标原点的 2x2 像素添加了颜色。
这就是为什么在整数坐标处绘制时可能会出现模糊线条的原因。在非视网膜上,您必须绘制 0.5 的偏移量。从技术上讲,您需要偏移 0.25 才能在 Retina 显示器上绘制精确的像素。虽然在那里它并不重要,因为在那个像素大小上你真的看不到它了。
长话短说:您不直接处理像素,而是图形引擎为您在浮点坐标和像素之间映射。
决议独立性。
您希望保持 UI 的数学表示尽可能准确,仅在您实际需要绘制到输出设备时才转换为像素 int 值(即使那样,也不是真的)。这样您就可以对视图应用任意数量的转换,并且仍然可以获得准确的结果。
此外,还可以渲染线条,例如,以半像素宽度甚至更小宽度呈现可见结果 - 系统使用智能抗锯齿来显示细线。
这与几十年来一直使用的矢量绘图原理相同(Adobe 的 PostScript、SVG 等)。事实上 Quartz 是基于 PDF 的,它是 PostScript 的现代版本。NeXT 在当时使用了 Display PostScript,然后它被认为是相当具有革命性的。
尺寸实际上是在非视网膜屏幕上与像素具有 1 比 1 关系的点,但对于视网膜屏幕,1 点 = 2 像素。所以在视网膜屏幕上你实际上可以增加半个点。