有没有一种方法可以检测多个平移手势?

3

我希望用户可以同时从每个拇指进行平移,但我不知道如何使用uigesturerecognizer检测它。 我可以轻松地同时检测到轻触和平移。

似乎第二个平移会阻止第一个。

非常感谢任何帮助。


2
你需要两个平移手势识别器。我猜你只有一个。 - Lily Ballard
1
我只有一个,我会试一下。谢谢! - Xavier
它们是独立的。一个用于移动角色,另一个用于改变其朝向。 - Xavier
1
@Xavier:你如何知道哪个平移手势是哪个?也许你应该使用委托回调(-gestureRecognizer:shouldReceiveTouch:)来允许每个识别器仅看到一个拇指。假设一个在屏幕左半部分,另一个在右半部分,你可以轻松使用触摸的位置来决定手势识别器是否应该看到它。 - Lily Ballard
是的,这听起来就是我想要的。我会尝试做到的。 - Xavier
显示剩余2条评论
1个回答

2

我通过以下方式定义shouldReceiveTouch来解决它:

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if (gestureRecognizer == singleTap) {
        return YES;
    }
    if (gestureRecognizer == pan1 && [touch locationInView:self].x > 160) {
        return YES;
    }
    if (gestureRecognizer == pan2 && [touch locationInView:self].x <= 160) {
        return YES;
    }
    return FALSE;
}

initWithFrame方法有以下代码:

self.userInteractionEnabled = YES;
singleTap = [[UITapGestureRecognizer alloc]
                                     initWithTarget:self action:@selector(handleSingleTap:)];
singleTap.numberOfTapsRequired = 1;
[self addGestureRecognizer:singleTap];
[singleTap release];
NSLog(@"tap: %p", singleTap);

pan1 = [[UIPanGestureRecognizer alloc]
                               initWithTarget:self action:@selector(handlePan1:)];
[self addGestureRecognizer:pan1];
NSLog(@"pan1: %p", pan1);

pan2 = [[UIPanGestureRecognizer alloc]
                                initWithTarget:self action:@selector(handlePan2:)];
[self addGestureRecognizer:pan2];

for (UIGestureRecognizer *recognizer in self.gestureRecognizers) {
    recognizer.delegate = self;
}
NSLog(@"pan2: %p", pan2);

1
您可能还想查看-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: - Ephemera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接