【问题标题】:In iOS coordinate system, is the given location in pixels or in another specific unit?在 iOS 坐标系中,给定位置是像素还是其他特定单位?
【发布时间】:2014-02-28 16:38:47
【问题描述】:

在我的应用程序中,用户可以手动将一些 UIViews 放置在 UIImageView 中。在处理结果时,我注意到 UIViews Location (X, Y) 或 Width 甚至 Height 都是浮点数,所以我有一些浮点值,例如:100.22233

我不明白这怎么可能,因为我需要将这些值以像素为单位,有没有办法将这些值转换为像素?

谢谢。

【问题讨论】:

  • 你一定是看错了值

标签: ios coordinate-systems


【解决方案1】:

framebounds 等 UIView 属性以点而不是像素为单位提供坐标。一点是非视网膜屏幕上的一个像素;一个点是视网膜屏幕上的四个像素(2x2 矩形)。

如果你想要坐标的整数值,你可以像这样截断浮点值:

CGFloat xLocation = (NSInteger)100.22233 + (CGFloat)0.0f;

如果您想要四舍五入到最接近的整数(如 cmets 中建议的那样,从 100.8 开始时为 101),您可以在四舍五入之前将 0.5 添加到浮点数,如下所示:

CGFloat xLocation = (NSInteger)(100.8 + 0.5) + (CGFloat)0.0f;

【讨论】:

  • 这样我不会松掉0.22233吧?假设我有 100.8,使用 100 像素会使我松动将近 1 像素,不是吗?
  • 是的,这是截断。如果您想要四舍五入到最接近的整数值,标准技术是在截断之前添加 0.5。我会更新我的答案来证明这一点。
【解决方案2】:

单位是点,在非视网膜中转换为 1pt == 1px,在视网膜中转换为 1pt == 2px。

如果你想要整数值,你可以使用CGRectIntegral like:

view.frame = CGRectIntegral(view.frame)

【讨论】:

    【解决方案3】:

    点与像素 在 iOS 中,所有坐标值和距离都使用浮点值指定,单位为点。点的可测量大小因设备而异,并且在很大程度上无关紧要。关于点的主要理解是它们为绘图提供了一个固定的参考框架。

    https://developer.apple.com/library/ios/documentation/windowsviews/conceptual/viewpg_iphoneos/WindowsandViews/WindowsandViews.html

    https://developer.apple.com/library/ios/documentation/general/conceptual/Devpedia-CocoaApp/CoordinateSystem.html

    你可以详细看一下上面的文档

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2023-04-06
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多