Iphone SDK中的同步手势识别器

use*_*890 25 iphone objective-c uigesturerecognizer

我需要使用UISwipeGestureRecognizer(例如,UISwipeGestureRecognizerDirectionRightUISwipeGestureRecognizerDirectionLeft)捕获两个不同的滑动手势.当我使用addGestureRecognizer方法添加两个不同的识别器时,只有最后添加的识别器有效.我已经读过我需要实现gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizerDelegate协议方法,但没有任何效果.

任何人都可以帮助捕获两个或多个相同的手势的简单示例?谢谢!

use*_*890 34

这真的很容易:

首先我们应该创建实现UIGestureRecognizerDelegate协议的类:

@interface MyGestureDelegate : NSObject <UIGestureRecognizerDelegate>
Run Code Online (Sandbox Code Playgroud)

@implementation MyGestureDelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    return YES;
}

并像这样使用它:


    UISwipeGestureRecognizer *swipeGestureLeft = [[UISwipeGestureRecognizer alloc]
                                              initWithTarget:self action:@selector(handleSwipeGestureLeft:)];
    [self.view addGestureRecognizer:swipeGestureLeft];
    swipeGestureLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    [swipeGestureLeft release];

    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(handleSwipeGesture:)];
    swipeGesture.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:swipeGesture];

    MyGestureDelegate *deleg = [[MyGestureDelegate alloc] init];

    [swipeGesture setDelegate:deleg];
    [swipeGesture release];


iro*_*key 20

答案:"嗯,快速查看文档..."来自凤凰绝对不行!

他正在设置一个掩码,然后使用相同的变量进行测试,好像识别器清除它并设置一个位.它存储,正如他从文档中正确引用的那样:

滑动的允许方向

sender.direction
Run Code Online (Sandbox Code Playgroud)

将简单地返回您最初设置的面具,在他的示例中,永远不会解决单一方向!

UISwipeGestureRecognizerDirectionRight == 1
UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft == 3
Run Code Online (Sandbox Code Playgroud)

另外,对于大多数情况,您不需要:

  • 设置代表
  • 允许同时手势识别(除非你想要同时滑动;不太可能)
  • 将识别器发送到选择器

以下适用于我:

   UISwipeGestureRecognizer* swipe;

   swipe = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeL)] autorelease];
   swipe.direction = UISwipeGestureRecognizerDirectionLeft;
   [view addGestureRecognizer:swipe];

   swipe = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeR)] autorelease];
   swipe.direction = UISwipeGestureRecognizerDirectionRight; // default
   [view addGestureRecognizer:swipe];
Run Code Online (Sandbox Code Playgroud)