Настройка SwipeGestureRecognizer, требуется уточнение

мне не хватает чего-то простого здесь, Пожалуйста, помогите мне понять, что.

мой контроллер настройка

UIGestureRecognizer *swipe = [[UIGestureRecognizer alloc] 
          initWithTarget:gameView action:@selector(handleSwipeFrom:)];
[gameView addGestureRecognizer:swipe];

на GameView настройка

@interface GameView : UIView<UIGestureRecognizerDelegate> 

далее он заявляет

- (IBAction) handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer;

и устанавливает его как

- (IBAction)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {
    NSLog(@" ..............  Swipe detected!! ...................");
}

на раскадровка ссылки UIGestureRecognizer С IBACtion и настроен следующим образом: enter image description here

Я немного обеспокоен тем, что UIGestureRecognizer появляются под контроллером, а не вид, как показано, но я не могу его исправить.

enter image description here

когда приложение построено, swipes, однако, не распознаются.

пожалуйста, предложите, что мне здесь не хватает, и иду ли я правильным путем о настройке вещей.

3 ответов


вы настраиваете два отдельных распознавателя жестов. Один в коде, который, вероятно, ничего не делает, другой в раскадровке, который, вероятно, не имеет цели.

в коде вы должны инициализировать распознаватель жестов салфетки следующим образом:

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:gameView action:@selector(handleSwipeFrom:)];
 // And assuming the "Up" direction in your screenshot is no accident
swipe.direction = UISwipeGestureRecognizerDirectionUp;

или, Конечно, вы можете подключить распознаватель салфетки в раскадровке. Это легко сделать, щелкнув правой кнопкой мыши на распознавателе жестов и подключив SentActions к handleSwipeFrom: метод, или аналогично вы можете перетащить из инспектор соединений справа (как показано на скриншоте) к именованной функции. На изображении вы можете видеть, что у меня есть Sent Actions подключен к методу swipeTarget:.

enter image description here

но в настоящее время у вас есть два неполных распознавателя.


-(void)addSwipeEvent:(UIView*)subView{

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
    recognizer.numberOfTouchesRequired = 1;
    recognizer.delegate = self;
    [subView addGestureRecognizer:recognizer];
    [recognizer release];

    UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
    leftRecognizer.direction=UISwipeGestureRecognizerDirectionLeft;
    leftRecognizer.numberOfTouchesRequired = 1;
    leftRecognizer.delegate = self;
    [subView addGestureRecognizer:leftRecognizer];
    [leftRecognizer release];

    UISwipeGestureRecognizer *downRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
    downRecognizer.direction=UISwipeGestureRecognizerDirectionDown;
    downRecognizer.numberOfTouchesRequired = 1;
    donwRecognizer.delegate = self;
    [subView addGestureRecognizer:downRecognizer];
    [downRecognizer release];

    UISwipeGestureRecognizer *upRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
    upRecognizer.direction=UISwipeGestureRecognizerDirectionUp;
    upRecognizer.numberOfTouchesRequired = 1;
    upRecognizer.delegate = self;
    [subView addGestureRecognizer:upRecognizer];
    [upRecognizer release];
}

- (void) SwipeRecognizer:(UISwipeGestureRecognizer *)sender {
    if ( sender.direction == UISwipeGestureRecognizerDirectionLeft ){
        NSLog(@" *** SWIPE LEFT ***");

    }
    if ( sender.direction == UISwipeGestureRecognizerDirectionRight ){
        NSLog(@" *** SWIPE RIGHT ***");

    }
    if ( sender.direction== UISwipeGestureRecognizerDirectionUp ){
        NSLog(@" *** SWIPE UP ***");

    }
    if ( sender.direction == UISwipeGestureRecognizerDirectionDown ){
        NSLog(@" *** SWIPE DOWN ***");

    }
}


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[UIView class]])
    {
        return YES;
    }
    return NO;
}

    UISwipeGestureRecognizer *swipe = [[UISwipGestureRecognizer alloc] 
      initWithTarget:gameView action:@selector(handleSwipeFrom:)];
    [gameView addGestureRecognizer:swipe];


- (IBAction)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {
    NSLog(@" ..............  Swipe detected!! ...................");
}

тогда просто отмените то, что вы сделали в IB. Если вы делаете это в коде, а затем сделать это в IB тоже вы просто дублирование работы, и, возможно, удвоение раз салфетки обрабатывается