UITouch
遇到了一个非常奇怪的问题。
我正在开发游戏。它使用带有GLKView
的OpenGL(我确实有将来计划过渡到Metal)。也有一个UIScrollView
在使用中。我用它来生成X值,以滚动游戏UI的各个部分。
此UIScrollView
只是屏幕的一部分,但是可以保证其边界完全在GLKView
内。
当两个视图都收到UITouch调用时(例如touchesBegain:withEvent
),我将它们排队等待以后处理。在以后的处理中,我使用locationInView
生成坐标。在这种情况下,使用的视图是GLKView
。我也使用过nil
,但是行为是相同的。
下面的代码,其中view
是GLKView
。对于那些不熟悉的人,我主要使用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)始终会更改为适当的值。
一旦进入此模式,特定的模拟器就会以这种方式运行,直到我将其重置为止。请注意,在这种情况下,GLKView
和UIScrollView
都在接收触摸事件,因此有2个呼叫。我还确定UIScrollView
生成了正确的值。我不知道GLKView
的额外触摸事件的来源是什么。
在处理super
中的事件时,我不致电UIScrollView
。我还通过调用super
而不是调用super
进行了采样。它的行为相同。
如果我切换到其他模拟器或重置SIM卡,那么我只会接到一组电话,并且一切正常。
如上所述,这是非常罕见的事件。例如,在过去的一年中,我遇到过包括这次在内的5次。对于今天的活动,我尚未重置SIM卡,因此可以进行试验。我从过去的经验中知道它将解决此问题。
我也没有在设备上看到这种情况。