gpt4 book ai didi

ios - 多点触控时 UITouches "lost"

转载 作者:行者123 更新时间:2023-11-29 11:18:12 27 4
gpt4 key购买 nike

我无法让 UIView 通过多次触摸来响应我想要的方式。基本上某些 UITouches 在 UITouchPhaseBegan 中,但永远不会进入 UITouchPhaseEndedUITouchPhaseCancelled。这是我用来处理触摸的代码,从 touchesBegan:withEventtouchesMoved:withEventtouchesEnded:withEvent 调用>touchesCancelled:withEvent。如果我先放下一根手指,然后放下另一根手指,移动它们,然后同时松开它们,NSLog 输出有时会开始!开始了!结束! 而不是开始!开始了!结束!结束!。这些接触是否在某处丢失了?我如何跟踪它们?

- (void) handleTouchEvent:(UIEvent *)event {
for( UITouch* touch in [event allTouches] ) {
if( touch.phase == UITouchPhaseBegan ) {
NSLog(@"Began!");
if( ![m_pCurrentTouches containsObject:touch] )
[m_pCurrentTouches addObject:touch];
uint iVoice= [m_pCurrentTouches indexOfObject:touch];
CGPoint location = [touch locationInView:self];
m_pTouchPad->SetTouchPoint( location.x, location.y, iVoice );
m_pTouchPad->SetIsTouching( true, iVoice );
}
else if( touch.phase == UITouchPhaseMoved ) {
uint index= [m_pCurrentTouches indexOfObject:touch];
CGPoint location = [touch locationInView:self];
m_pTouchPad->SetTouchPoint( location.x, location.y, index );
}
else if( touch.phase == UITouchPhaseEnded || touch.phase == UITouchPhaseCancelled ) {
uint index= [m_pCurrentTouches indexOfObject:touch];
[m_pCurrentTouches removeObject:touch];
NSLog(@"Ended!");
m_pTouchPad->SetIsTouching( false, index );
}
}
}

编辑:

我悬赏是因为我真的想要一个很好的解决方案。总结一下:我需要一个系统,每次触摸开始也结束,所以如果用户放下一根手指然后在别处放下另一根手指,我可以看到两个触摸都开始了,到那时没有手指不再与设备接触时,我看到两次触摸都结束了。

我是否采用了错误的策略来实现这一目标?

最佳答案

一个事件可以报告多个触摸。所以你有时会“结束!”一次,因为只有一个事件到达并且只进行了一次触摸事件处理程序调用 - 但它报告了两次触摸结束。如果您手动处理多个同时触摸(手指),则由您单独跟踪每个触摸并检查每个事件中的每个触摸以查看报告了多少触摸并决定要做什么。

Apple 有示例代码展示了如何通过维护 CFDictionaryRef 来做到这一点:

http://developer.apple.com/library/IOs/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html#//apple_ref/doc/uid/TP40009541-CH3-SW7

(向下滚动到名为“处理多点触控事件”的部分。)

关于ios - 多点触控时 UITouches "lost",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com