- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法让 UIView
通过多次触摸来响应我想要的方式。基本上某些 UITouch
es 在 UITouchPhaseBegan
中,但永远不会进入 UITouchPhaseEnded
或 UITouchPhaseCancelled
。这是我用来处理触摸的代码,从 touchesBegan:withEvent
、touchesMoved:withEvent
、touchesEnded: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 来做到这一点:
(向下滚动到名为“处理多点触控事件”的部分。)
关于ios - 多点触控时 UITouches "lost",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483810/
我是一名优秀的程序员,十分优秀!