2010-05-03 22 views

Respuesta

20

Estás en el camino correcto. En touchesBegan debes almacenar la posición donde el usuario toca la pantalla por primera vez.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 
    self.startPosition = [touch locationInView:self]; 
} 

Código similar en toquesEnded le da la posición final. Al comparar las dos posiciones puede determinar la dirección del movimiento. Si la coordenada x se ha movido más allá de cierta tolerancia, tiene un deslizamiento hacia la izquierda o hacia la derecha.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 
    CGPoint endPosition = [touch locationInView:self]; 

    if (startPosition.x < endPosition.x) { 
     // Right swipe 
    } else { 
     // Left swipe 
    } 
} 

No es necesario touchesMoved a menos que desee detectar y realizar un seguimiento de un golpe mientras el usuario ha dejado de tocar la pantalla. También puede valer la pena probar que el usuario se haya movido una distancia mínima antes de decidir que ha realizado un deslizamiento.

+0

quixoto es correcto, orden interna GestureRecognizer es mejor. – fyasar

+0

¿puedo usarlo para UITableview? – Mashhadi

+0

Esto es bastante obsoleto, usando 'UISwipeGestureRecognizer' es mucho más limpio (iOS 9) – Cbas

15

Si está dispuesto a alcanzar el iPhone OS 3.2 o posterior (todos los iPads o iPhones actualizados), use el objeto UISwipeGestureRecognizer. Hará esto trivialmente, lo cual es perversamente bueno.

36

Va a utilizar UISwipeGestureRecognizer objeto de detectar el tacto y la dirección del golpe fuerte En

UIView o en cualquier lugar en el SDK iPhone.

UISwipeGestureRecognizer *rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)]; 
rightRecognizer.direction = UISwipeGestureRecognizerDirectionRight; 
[rightRecognizer setNumberOfTouchesRequired:1]; 

//add the your gestureRecognizer , where to detect the touch.. 
[view1 addGestureRecognizer:rightRecognizer]; 
[rightRecognizer release]; 

UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipeHandle:)]; 
leftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft; 
[leftRecognizer setNumberOfTouchesRequired:1]; 

[view1 addGestureRecognizer:leftRecognizer]; 
[leftRecognizer release]; 

- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
{ 
    NSLog(@"rightSwipeHandle"); 
} 

- (void)leftSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
{ 
NSLog(@"leftSwipeHandle"); 
} 

creo que esto la mejor solución para su problema

+0

Gracias por compartir, funciona. – Signcodeindie

Cuestiones relacionadas