在视图底部边缘触摸未注册 (iOS)

Posted

技术标签:

【中文标题】在视图底部边缘触摸未注册 (iOS)【英文标题】:Touch not registering at bottom edge of View (iOS) 【发布时间】:2014-04-28 09:04:04 【问题描述】:

我正在为 iPhone 试验一个基于 OpenGL ES 2 的全屏应用程序。

我可以正常使用,但由于某种原因,我无法在应用程序的底部 16 像素处绘图。

注意:

我用手指沿着线条的边缘拖动来绘制每条线 屏幕。

触摸任何底部16px注册为 触摸 16px。

如果我触摸底部 16 像素以上,触摸和笔触就会出现 在正确的地方。

我正在 ios 7.1 iPhone 5S 上进行测试。

为什么会这样? 这是我非常标准的触摸处理代码的样子:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event


    CGRect     bounds = [glView bounds];
    UITouch*    touch = [[event touchesForView:glView] anyObject];
    CGFloat scale = glView.contentScaleFactor;

    CGPoint touch_location = [touch locationInView:glView];
    touch_location.y = (bounds.size.height - touch_location.y);

    touch_location.x *= scale;
    touch_location.y *= scale;

    //... draw stuff etc.

【问题讨论】:

能否告诉我们状态栏是否隐藏?? @svrushal 是的。状态栏是隐藏的。您在图像中看到的是实际屏幕截图(稍后添加了灰色边框以显示屏幕边缘)。 【参考方案1】:

事实证明,这个问题没有真正的解决方案。我查看了应用商店中的其他一些绘画应用程序,但没有一个是在边缘绘制的。为了对称,它们中的大多数不会在底部 顶部 16px 左右绘制。我最终也做了同样的事情。

【讨论】:

【参考方案2】:

在你的项目状态栏是隐藏的。

如果是这样,那么您需要在视图中添加 +20,因为状态栏不存在。例如,如果您在 iPhone 中有带有状态栏的视图控制器,那么在纵向模式下,高度将为 460。但如果状态栏被隐藏,则我们必须将其设置为 480。

【讨论】:

谢谢。这似乎很有希望。虽然我不明白你是什么意思改变高度?我尝试使用 [view setBounds] 更改边界大小,这没有任何区别。这是你的意思吗?还是我应该在其他地方改变高度?【参考方案3】:

这当然是因为 iOS7 中控制中心的滑动手势。我在 UIButton 方面遇到了同样的问题(请参阅 here)

在您的情况下,您可以尝试添加 prefersStatusBarHidden :

- (BOOL)prefersStatusBarHidden 
    return YES;

【讨论】:

没有骰子。添加这个没有任何区别。

以上是关于在视图底部边缘触摸未注册 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

按钮未在自定义 UIButton 中注册触摸

未调用位置的 3D 触摸视图控制器

触摸事件未注册使用 Flash CC 的 HTML5 画布创作

UINavigationBar 为 UIScrollView 注册触摸

Swift:触摸不立即注册位于UIViewController底部的UIButtons

PlatformException(错误,java.lang.IllegalStateException:尝试创建未注册类型的平台视图:plugins.flutter.io/webview