- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 GLKit(不使用 Cocos2d)创建一个游戏,我基本上需要两个“按钮” - 每个按钮 250 点宽,并在横向模式下放置在相对的两侧。 MultipleTouch 是 YES,因为我需要跟踪不止一次触摸。
在touchesbegan中,我确定touch.x <= 250(按钮1)或>= view.bounds.size.width - 250(按钮2)。基于此,我将 BOOL 设置为 YES 来确定状态。
在 Touchsend 中,我想知道用户何时不再“按下”按钮 1 或按钮 2。问题是 - 我不能再测试 View 中触摸发生的位置,因为用户可能已经移动了手指,所以它不再位于最初按下的“按钮”上方。这意味着,如果用户通过按下按钮 1 开始触摸,但将手指移到按钮边界之外,然后抬起手指 - 状态仍为"is"。
是否有一种好方法可以可靠地跟踪 TouchesEnded 中触摸首次开始的位置?任何指向源代码的指针都将受到高度赞赏。
编辑:这是我创建的代码:
请注意,我知道这段代码是错误的,因为它只跟踪一次触摸。但是,我想要实现的是当用户按下左按钮并将取景器移出该按钮时..我需要知道 TouchsEnded 中的触摸相当于之前在按钮中开始的触摸,以便我知道该按钮不再被“按下”。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Determine where the touch happened
CGPoint p = [touch locationInView:self.view];
// If the user pressed the left gutter then break
if ( p.x <= 250 )
isBreaking = YES;
// If the user pressed the right gutter then accelerate
if ( p.x >= (self.view.bounds.size.width - 250) )
isAccelerating = YES;
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Determine where the touch happened
CGPoint p = [touch locationInView:self.view];
// If the user pressed the left gutter then stop break
if ( p.x <= 250 )
isBreaking = NO;
// If the user pressed the right gutter then stop accelerate
if ( p.x >= (self.view.bounds.size.width - 250) )
isAccelerating = NO;
}
最佳答案
我想我找到了解决方案,尽管我还没有测试它:http://www.blumtnwerx.com/blog/2009/06/taming-touch-multi-touch-on-the-iphone/
我真正需要知道的是文档:
A UITouch object is persistent throughout a multi-touch sequence. You should never retain an UITouch object when handling an event. If you need to keep information about a touch from one phase to another, you should copy that information from the UITouch object.
关于ios - 多点触控的触摸跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17991426/
我是一名优秀的程序员,十分优秀!