Симулятор iPhone смахивание вправо работает, а свайп влево - нет?

Я пытаюсь провести пальцем влево и вправо на UIScrollView. Однако похоже, что смахивание влево не работает в симуляторе iPhone, хотя смахивание вправо работает. Я пропустил какой-нибудь шаг?

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    self.scrollView.multipleTouchEnabled = YES;
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
    swipe.delaysTouchesBegan = YES;
    swipe.numberOfTouchesRequired = 2;
    [self.scrollView addGestureRecognizer:swipe];
    [swipe release];
}

- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer
{
    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {

    } else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {

    }
}

person Guoliang Cao    schedule 05.07.2011    source источник


Ответы (3)


Используйте следующее:

UISwipeGestureRecognizer *rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)];
rightRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
[rightRecognizer setNumberOfTouchesRequired:1];
[mainSlideShowImageScrollView addGestureRecognizer:rightRecognizer];
[rightRecognizer release];
UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipeHandle:)];
leftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[leftRecognizer setNumberOfTouchesRequired:1];
[mainSlideShowImageScrollView addGestureRecognizer:leftRecognizer];
[leftRecognizer release];   



- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
   {
      //Do moving
   }

- (void)leftSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
{
  // do moving
}
person rptwsthi    schedule 05.07.2011
comment
Вы имеете в виду создание двух UISwipeGestureRecognizer, один с селектором rightSwipeHandle:, другой с leftSwipeHandle:? Мне все еще нужно проверять направление распознавания внутри этих двух обработчиков? - person Guoliang Cao; 05.07.2011
comment
Да я имел в виду именно так. И вам не нужно беспокоиться ни о чем другом, только о том, что вы хотите сделать, влево или вправо. Но да, не пропустите код, написанный изначально, поскольку он указывает распознавателю жестов на конкретный контейнер. - person rptwsthi; 05.07.2011
comment
Только что заметил, что я могу установить UISwipeGestureRecognizer.direction в viewWillAppear. Смахивание влево работает после того, как я установил направление на UISwipeGestureRecognizerDirectionLeft. Теперь я понимаю о чем вы. Большое Вам спасибо. - person Guoliang Cao; 05.07.2011

Ваш код handleSwipe действительно правильный. Вам нужны два UISwipeGestureRecognizer, но вы можете указать их обоих на один и тот же обработчик, содержащий ваш оператор IF.

person Kokodoko    schedule 23.12.2011

Вы можете создать один распознаватель жестов, который обрабатывает смахивание влево и вправо (или даже во всех направлениях!):

    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;

Все направления:

  swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;
person LMVogel    schedule 11.03.2016