2013-05-22 3 views
0

Я добавляю UISwipeGestureRecognizer и UITapGestureRecognizer к представлению в режиме viewDidLoad контроллера вида.iOS Simulator Непризнанные жесты

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     [self.view addGestureRecognizer:[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cardSwipe:)]]; 
     [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cardTap:)]]; 
    } 
- (void)cardSwipe:(UISwipeGestureRecognizer *)sender { 
    //get the card. set faceUp to false. 
    CGPoint location = [sender locationInView:sender.view]; 
    NSIndexPath *cellIndex = [self.cardCollectionView indexPathForItemAtPoint:location]; 
    if(cellIndex){ 
     UICollectionViewCell *cell = [self collectionView:self.cardCollectionView cellForItemAtIndexPath:cellIndex]; 
     if(cell && [cell isKindOfClass:[CardCollectionViewCell class]]){ 
      [[((CardCollectionViewCell *)cell) cardView] handleCardSwipe]; 
     } 
    } 
} 
- (void)cardTap:(UITapGestureRecognizer *)sender { 
    //get the card. set faceUp to false. 
    CGPoint location = [sender locationInView:sender.view]; 
    NSIndexPath *cellIndex = [self.cardCollectionView indexPathForItemAtPoint:location]; 
    if(cellIndex){ 
     UICollectionViewCell *cell = [self collectionView:self.cardCollectionView cellForItemAtIndexPath:cellIndex]; 
     if(cell && [cell isKindOfClass:[CardCollectionViewCell class]]){ 
      [[((CardCollectionViewCell *)cell) cardView] handleCardSwipe]; 
     } 
    } 
} 

В случае, если это релевантно: представление содержит UICollectionView.

Отводы и выступы не распознаются. Есть ли что-то очевидное, что мне не хватает? Спасибо.

+0

Вы проверили, эти методы называются или нет ...? –

+0

Пожалуйста, прочитайте документы для 'UIGestureRecognizer'. В частности, часть о проверке свойства 'state' распознавателя жестов в методе действий. – rmaddy

+0

Если ваш просмотр коллекции охватывает весь 'self.view', то распознаватели жестов для' self.view', вероятно, никогда не получат никаких событий, поскольку просмотр коллекции будет обрабатывать их все. – rmaddy

ответ

1

Оказывается, представление не было реагируя на любые жесты - прокрутку, нажатия на кнопки или действия салфетки. Я удалил сгенерированные папки с ~/Library/Application Support/iPhone Simulator/6.1/Applications и ~/Library/Developer/Xcode/DerivedData, сбросьте настройки симулятора (от iOS Simulator>Reset Contents and Settings), сделал чистый в xcode (Product> Clean) и снова запустил приложение. Жесты теперь распознаются. Я не уверен, какие из вышеперечисленных проблем были устранены ... возможно, что простого сброса содержимого и настроек симулятора было бы достаточно.

+0

Это законная проблема, которая не имеет ничего общего с кодом, хотя я не могу объяснить причину. Когда я столкнулся с этим, все, что я сделал, это сбросить симулятор и повторно развернуть приложение, и все снова заработало. – Robert

+0

У меня возникает эта проблема после сброса симулятора, но только на симуляторе iPhone 6. – Brett

-3

Сначала вам нужно добавить метод UITapGestureRecognizer Делегирование Для .h

@interface ViewController : UIViewController<UIGestureRecognizerDelegate> 

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapImgView:)]; 
     doubleTap.numberOfTapsRequired = 2; 
     doubleTap.delegate = self; 

- (void)doubleTapImgView:(UITapGestureRecognizer *)gesture 
{ 
    //Do What you want Here 
} 
+1

Вам не нужно добавлять 'UIGestureRecognizerDelegate'. Это необязательно. Вы только установите его, если вам нужно реализовать методы делегата. И нет такой вещи, как 'UITapGestureRecognizerDelegate'. – rmaddy

0

добавить этот метод к вашему ViewController поэтому ваш UICollectionView не блокирует другие жесты

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return true; 
} 
+0

Я добавил протокол к интерфейсу контроллера, установил себя как делегат распознавателя жестов и добавил вышеописанный метод. Не помогло. – septerr

2

Перезагрузка тренажера Работала для меня.