从技术上讲,x,y,宽度和高度表示与像素相关的一组维度。我 不能有200.23422像素,为什么他们使用浮动而不是整数?为什么UIView帧由浮点组成?
2
A
回答
5
浮动的原因在于现代CPU和GPU a经过优化,可以并行处理许多浮点数。 iOS和Mac都是如此。
使用Quartz,您不需要提供单个像素,但是您绘制的所有内容始终都是反锯齿。如果坐标为1.0,1.0,则实际上会在坐标原点的2x2像素上添加颜色。
这就是为什么你可能会得到模糊的线条,如果你在整数坐标绘制。在非视网膜上,你需要以0.5抵消。从技术上讲,您需要抵消0.25以在Retina显示屏上绘制精确的像素。虽然这并不重要,因为在像素尺寸上你不会再看到它。长话短说:你不直接寻址像素,但图形引擎会为浮点坐标和像素之间的映射。
1
尺寸实际上是在非视网膜屏幕上与像素具有1对1关系的点,但对于视网膜屏幕1点= 2像素。所以在视网膜屏幕上,你实际上可以增加半个点。
4
决议独立性。
你想保持你的UI的数学表示尽可能准确,只有当你真正需要绘制到输出设备时(甚至不是真的)才能转换为像素int值。这样就可以将任意数量的转换应用于您的视图,并仍然可以得到准确的结果。
此外,可以渲染线条,例如半像素宽度,甚至更少的可见结果 - 系统使用智能抗锯齿来显示细线。
这与矢量图几十年来一直使用的原理相同(Adobe的PostScript,SVG等)。事实上,Quartz基于PDF,这是PostScript的现代版本。 NeXT使用Display PostScript的时候,它被认为是非常革命性的。
相关问题
- 1. 为什么浮点异常?
- 2. Elixir Logger为什么由宏组成?
- 3. 为什么LINQ组由
- 4. 为什么我的999999999浮点数变成10000000000?
- 5. 为什么我的浮点数变成Numpy Timeseries的一个值?
- 6. 添加浮点数,这是为什么?
- 7. CSS - 包含浮点问题 - 为什么?
- 8. 为什么浮点数333.50是双
- 9. 为什么`inf`代表浮点溢出?
- 10. 为什么浮点异常(Linux)
- 11. 为什么NumPy浮点数不给ZeroDivisionError?
- 12. 为什么“overflow:hidden”会清除浮点数?
- 13. 为什么这个浮点数组会给出错误?
- 14. UIView的组帧古怪
- 15. 为什么scikit-image以浮点形式返回视频的帧数?
- 16. 1帧由左右声道组成?
- 17. 什么是浮点纹理?
- 18. 为什么52.0作为一个浮点数投射为int时变成51?
- 19. 浮点异常C为什么,它是什么?
- 20. 浮点异常C++为什么和它是什么?
- 21. 为什么UIView右移offsetBy
- 22. 你为什么继承UIView?
- 23. 什么是linux进程表?它由什么组成?
- 24. 为什么Chrome扩展API主要由回调组成?
- 25. 为什么GCC为Cortex-A9生成Fxxx而不是Vxxx浮点汇编指令?
- 26. 在php中为什么是浮点数>字符串或浮点数> int
- 27. 转换字节数组成浮点
- 28. 硬浮点数和软浮点数之间有什么区别?
- 29. 长期浮动,为什么?
- 30. 为什么浮动下降?
那真的没有回答这个问题,这个浮点语法是在视网膜前。 –
这个因素又如何进入'决议独立性' –
我认为这是对未来的证明。也许将来1点可能等于4个像素。所以100.25的维数是有意义的。 –