我已经将UIView子类化,它已经处理了单个触摸和拖动。我希望增强此视图的交互,以便在拖动时,如果用户用第二根手指触摸(视图中的任何其他位置),则系统会打印一条消息。我对代码进行了抨击:
在我的头文件中,我已声明:
NSString *key; // This unique key identifies the first touch
我的.m文件:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *t in touches) {
if (key == NULL)
{
key = [[[NSValue valueWithPointer:t] description] copy];
}
if ([key isEqualToString:[[NSValue valueWithPointer:t] description]])
{
NSLog(@"calling parent to handle single touch");
[super touchesBegan:[NSSet setWithObject:t] withEvent:event];
}
else
{
[self twoTouchDetected];
}
}
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *t in touches) {
if ([key isEqualToString:[[NSValue valueWithPointer:t] description]])
{
[super touchesMoved:[NSSet setWithObject:t] withEvent:event];
}
}
}
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *t in touches) {
if ([key isEqualToString:[[NSValue valueWithPointer:t] description]])
{
[super touchesEnded:[NSSet setWithObject:t] withEvent:event];
key = NULL;
}
}
}
不幸的是,这个实现存在问题。第一次(用一根手指拖动)如果我用第二个手指触摸,系统会立即注册。然而,第二次用第二根手指触摸(同时仍然继续用第一根手指拖动),第二根手指触摸不会记录,直到第一根手指被抬起。来自第二根手指的事件已备份......
有些奇怪的是,有时,父母会被第二根手指而不是第一根手指的触摸数据调用。
答案 0 :(得分:0)
事实证明我的代码工作正常,但问题在于我将属于Core Plot框架的对象子类化。这个框架对他们的对象做了奇怪的事情,因此接触的顺序错误。
我创建了一个空项目来接收触摸,一切都很棒。