UITouch locationInView有时在模拟器上不正确

时间:2019-04-04 22:11:46

标签: ios uikit uitouch

UITouch遇到了一个非常奇怪的问题。

我正在开发游戏。它使用带有GLKView的OpenGL(我确实有将来计划过渡到Metal)。也有一个UIScrollView在使用中。我用它来生成X值,以滚动游戏UI的各个部分。

UIScrollView只是屏幕的一部分,但是可以保证其边界完全在GLKView内。

当两个视图都收到UITouch调用时(例如touchesBegain:withEvent),我将它们排队等待以后处理。在以后的处理中,我使用locationInView生成坐标。在这种情况下,使用的视图是GLKView。我也使用过nil,但是行为是相同的。

下面的代码,其中viewGLKView。对于那些不熟悉的人,我主要使用C ++ ...因此是auto

    auto p = [touch locationInView:view];

该系统已经运行了相当长的一段时间。但是,在少数情况下,坐标是错误的。不仅错误,而且在这种情况下,每次单击鼠标似乎都收到2个Touch Down和2个Touch Up事件。

Touch at 0.000000 375.000000 a0a08070 0 0
Touch at 331.500000 178.000000 a0a08070 0 0
Touch at 331.500000 178.000000 a0a08070 0 3
Touch at 0.000000 375.000000 a0a08070 0 3

例如上述输出。浮点数是CGPoint中的locationInView。十六进制值可以忽略。最后两个值分别是类型和相位。

无论单击屏幕的哪个位置,该坐标0.0、375.0始终相同。当我在屏幕上单击时,内部数字(331.5和178)始终会更改为适当的值。

一旦进入此模式,特定的模拟器就会以这种方式运行,直到我将其重置为止。请注意,在这种情况下,GLKViewUIScrollView都在接收触摸事件,因此有2个呼叫。我还确定UIScrollView生成了正确的值。我不知道GLKView的额外触摸事件的来源是什么。

在处理super中的事件时,我不致电UIScrollView。我还通过调用super而不是调用super进行了采样。它的行为相同。

如果我切换到其他模拟器或重置SIM卡,那么我只会接到一组电话,并且一切正常。

如上所述,这是非常罕见的事件。例如,在过去的一年中,我遇到过包括这次在内的5次。对于今天的活动,我尚未重置SIM卡,因此可以进行试验。我从过去的经验中知道它将解决此问题。

我也没有在设备上看到这种情况。

0 个答案:

没有答案