复杂的iOS多点触摸交互-有什么建议吗?
我已经对一个UIView进行了子类化,它已经可以处理单触和拖动。我希望增强此视图的交互,以便在拖动时,如果用户用第二个手指触摸(视图中的任何其他位置),系统将打印一条消息。我尝试了一下代码: 在我的头文件中,我声明:复杂的iOS多点触摸交互-有什么建议吗?,ios,Ios,我已经对一个UIView进行了子类化,它已经可以处理单触和拖动。我希望增强此视图的交互,以便在拖动时,如果用户用第二个手指触摸(视图中的任何其他位置),系统将打印一条消息。我尝试了一下代码: 在我的头文件中,我声明: NSString *key; // This unique key identifies the first touch 我的.m文件我有: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
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;
}
}
}
不幸的是,这种实现存在一些问题。第一次(用一个手指拖动)如果我用第二个手指触摸,系统将立即注册它。但是,当我第二次用第二个手指触摸时(仍继续用第一个手指拖动),直到抬起第一个手指,第二个手指触摸才会记录。来自秒针的事件已备份
同样奇怪的是,有时会用第二个手指而不是第一个手指的触摸数据调用父对象。结果证明我的代码是有效的,但问题是我将属于核心绘图框架的对象子类化了。这个框架对他们的对象做了一些奇怪的事情,因此触摸的顺序是错误的
我创建了一个空项目来接收触摸,结果一切都很好。为什么不使用?我尝试过使用两个手指,一次轻触手势识别器,但如果我用手指拖动,这将不起作用。识别器将吃掉所有事件,然后再将其传递到touchesBegin方法。要进行拖动,您需要使用UIPangestureRecognizer在这种情况下使用手势识别器的优势是什么?我可能能够识别单指平移手势(相当于拖动),但我还需要在用户平移时同时识别轻触。这不需要额外的低水平控制吗?