【问题标题】:Touches are in retina resolution even though app is running in non-retina mode即使应用程序在非视网膜模式下运行,触摸也处于视网膜分辨率
【发布时间】:2013-01-08 17:33:54
【问题描述】:

我有一个针对 iPad2(非视网膜 1024x768 显示器)的应用。我没有明确启用视网膜模式,我的比例因子设置为 1,但触摸事件报告视网膜模式下的坐标,即屏幕的 center 是 (1024,768),角是 ( 2047,1535)。

我认为重点是 iPad 应用程序会自动在非视网膜模式下运行,除非您通过更改比例因子明确启用它。

我正在使用一个创建 UIView 的库,如何获取主 UIView 并查询它以查看发生了什么?

对于视网膜测试,我只依赖模拟器 - 我有 6.1。然而,另一位开发者确认它没有响应他的 iPad3 设备上的触摸,所以我确定这不是模拟器问题。

【问题讨论】:

  • 我不知道为什么会这样,你能发布一些相关的代码,看看我们是否可以重现它?是否有调用 drawRect() 或任何 Open GL 调用?如果您以编程方式阅读 contentScaleFactor 是 1 吗?另外,您是否看过在 UIView 中使用 convertPoint:fromView: 方法?
  • 那么库只是调用了一个带有坐标的方法,所以它要么是错误的,要么是创建错误的 UIView。如果您发布代码告诉我如何获取主 UIView(或所有 UIView,以便我可以检查它们)并检查相关属性,您可以获得赏金!
  • 过去这样做并打印出我使用过此类别的每个视图的详细信息:gist.github.com/nskboy/877593。该特定的为每个子视图添加缩进。然后您可以修改它以将特定属性打印到调试器输出。您不一定需要使用该类别,它只会在以后有所帮助。

标签: ios ipad retina-display


【解决方案1】:

我的 glkview 应用程序遇到了相反的情况。我使用 screen->scale 属性来翻译点击坐标。所以你所拥有的是(我怀疑)是以下之一:(a)在你的故事板中有一些属性设置为你的视图(检查它们)(b)你的设备提供这样的布局(什么 iPad btw)?

稍后将发布更多详细信息。

【讨论】:

    【解决方案2】:

    有一些技术错误,可能你没有仔细阅读苹果文档。

    1) 您无法启用/禁用retina:retina 在硬件中,iOS 可以正确使用它,您只能使用它。 (在某些情况下,您可以根据设备调整您的代码)

    2) 很少使用比例因子(阅读苹果文档),并且只在与自定义绘图相关的专门代码中使用

    3) 通常在 Apple 视觉中您不应该在视网膜硬件和非视网膜中表现不同。 4) 像素和坐标是逻辑坐标,所以右下角像素总是在 y=1024 x=768。

    4) iPad2 上的分辨率不能为 2048 像素。

    我不知道您使用的是哪个库,但 STD 行为不同。

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2014-03-19
      • 1970-01-01
      相关资源
      最近更新 更多