iPad:从屏幕上边框拖动手指时未调用 touchesBegan

标签 ipad touchscreen

我正在编写一个 ipad 应用程序,您可以用 1 或 2 个手指在屏幕上拖动。我使用 touchesBegan、touchesMoved 和 touchesEnded 方法来识别触摸。我为 View 启用了多点触控。

现在我发现了一种奇怪的行为。如果我将手指放在屏幕上边框之外并将其向下拖动到屏幕上,我将不会收到对 touchesBegan 或 touchesMoved 的调用。这不能为其他屏幕边框重现。

唯一可以重现的其他情况是当我使用横向且主页按钮位于左侧时。在本例中,屏幕上边框的行为相同。

有没有人知道这方面的信息或在测试时是否有同样的经历?

编辑: 我做了一些额外的测试。如果我将手指放在该区域或从任何较低的屏幕位置向上滑动,状态栏通常所在的区域会非常好地接收 touchesBegan 或 touchesMoved。仅当我从完全高于屏幕边缘的位置向下滑动手指时,才无法识别输入。

编辑2: 附加信息: - 我的应用程序使用 OpenGL View 。 - 状态栏被隐藏。 - 在所有方向上触摸(隐藏的)状态栏区域时,touchesBegan 被正确调用。

最佳答案

我相信潜在的问题是屏幕上的触敏层在可见屏幕上方延伸了几个像素,这意味着从技术上讲,从那里发起的触摸是在 UIViewController View 之外开始的。由于您的 UIViewController 只能看到源自其 View 的触摸,因此它不会看到这些触摸。因此,如果您的设备屏幕在可见像素上方一两个像素处被触摸,触摸将被发送到该屏幕外区域(可能是状态栏?)中存在的任何虚拟层。这会阻止您的 UIViewController 接收到任何触摸,因为滑动并非源自您的 UIViewController 的 View 区域。

要解决此问题,在 applicationDidLaunch 时,您可以将 UIWindow 的大小调整为(比如)每侧大 10 像素,并在其中创建一个中间 UIViewController“背景”层,以匹配窗口的扩展大小。然后将您的主界面 UIViewController View 设置为“背景” View 的 subview ,在所有边上插入 10 个像素以重新匹配物理屏幕尺寸。如果您的界面旋转,则每次都必须在后台 UIViewController 的 willAnimateRotationToInterfaceOrientation 方法中重新应用背景 View 的 10 像素放大。

最后,让后台 View Controller 中的 touchesBegan/Moved/Ended 方法将它们的触摸直接转发到主 UI View Controller 中的相应方法。瞧!

希望对您有所帮助, 本

关于iPad:从屏幕上边框拖动手指时未调用 touchesBegan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187236/

相关文章:

iphone - 当我单击一个通知时从列表中删除所有推送通知

iphone - 寻找高分辨率 GameCenter 图标

audio - 使用声音输入的触摸屏?

iphone - UITableView 低于代码全屏?

css - 我在首次加载时或从当前页面导航回来时遇到 iPad 方向问题

iPhone:以编程方式混合两个音频文件?

ios - 悬停一个 DIV 会影响另一个 DIV : Why takes two taps on portable devices?

Android:如何允许在非触摸屏设备上的 ListView 中导航?

javascript - 滚动时停止 touchstart 执行得太快

javascript Canvas : chrome touch screen not working