2012-03-14 15 views
6

Me falta algo simple aquí, ayúdenme a entender qué.Configuración de SwipeGestureRecognizer, aclaración necesaria

Mi controlador establece

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

El GameView está configurado

@interface GameView : UIView<UIGestureRecognizerDelegate> 

Se declara además

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

y lo configura como

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

Los Storyboard enlaces UIGestureRecognizer con este IBACtion y está configurado de la siguiente manera: enter image description here

estoy un poco preocupado de que UIGestureRecognizer aparecen debajo de un controlador y no la vista como se muestra, pero puedo Parece ser capaz de corregirlo.

enter image description here

Cuando la aplicación está construida, lectores, pero no están reconocidas.

Por favor sugiera lo que me falta aquí y si voy por el camino correcto para configurar las cosas.

+0

Estás Initing un UIGestureRecognizer en lugar de un UISwipeGestureRecognizer por una – Brodie

Respuesta

16

Está configurando dos reconocedores de gestos por separado. Uno en el código que probablemente no hace nada, el otro en el guión gráfico que probablemente no tiene objetivo.

En el código que debe inicializar un gesto reconocedor de golpe de este modo:

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

O, por supuesto, se puede conectar el reconocedor de golpe en el guión gráfico. Esto se hace fácilmente haciendo clic derecho en el reconocedor de gestos y conectando las SentActions al método handleSwipeFrom:, o de manera similar puede arrastrar desde el inspector de conexiones a la derecha (como se ve en la captura de pantalla) a la función nombrada. En la imagen puede ver que tengo mi Sent Actions conectado al método swipeTarget:.

enter image description here

Pero en la actualidad se tienen dos reconocedores incompletos.

+0

excelente. Muchas gracias NJones – JAM

+2

No hay problema. Feliz de ayudar. – NJones

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


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

Luego solo deshaga lo que hizo en IB. Si lo hace en el código, a continuación, hacerlo en IB también estás duplicar el trabajo, y tal vez doblando las veces que el golpe se manipula

11
-(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; 
} 
+1

implementa el delegado UIGestureRecognizerDelegate en el archivo .h. – Vibhooti