2010-02-14 14 views
0

Je crée une application iPhone dans laquelle l'utilisateur peut faire des gestes (glisser vers la gauche et la droite) pour parcourir les onglets. Mon problème est que certaines pages ont des vues telles que le pickview, le webview, les champs de texte et les boutons. Les balayages ne fonctionnent pas sur ceux-ci. Y a-t-il un moyen d'avoir des gestes globaux?iPhone - Gestes sur UIPickerView et UIWebView

Pour référence, mon exemple de code geste:

//Swipe between tabs 
#define mindrag 100 
CGPoint mystartTouchPosition; 
BOOL isProcessingListMove; 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint newTouchPosition = [touch locationInView:self.view]; 
    if(mystartTouchPosition.x != newTouchPosition.x || mystartTouchPosition.y != newTouchPosition.y) { 
     isProcessingListMove = NO; 
    } 
    mystartTouchPosition = [touch locationInView:self.view]; 
    [super touchesBegan:touches withEvent:event]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = touches.anyObject; 
    CGPoint currentTouchPosition = [touch locationInView:self.view]; 

    // If the swipe tracks correctly. 
    double diffx = mystartTouchPosition.x - currentTouchPosition.x + 0.1; // adding 0.1 to avoid division by zero 
    double diffy = mystartTouchPosition.y - currentTouchPosition.y + 0.1; // adding 0.1 to avoid division by zero 

    if(abs(diffx/diffy) > 2.5 && abs(diffx) > mindrag) 
    { 
     // It appears to be a swipe. 
     if(isProcessingListMove) { 
      // ignore move, we're currently processing the swipe 
      return; 
     } 

     if (mystartTouchPosition.x < currentTouchPosition.x) { 
      isProcessingListMove = YES; 
      self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1]; 
      return; 
     } 
     else { 
      isProcessingListMove = YES; 

      self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:3]; 

      return; 
     } 
    } 
    else if(abs(diffy/diffx) > 1) 
    { 
     isProcessingListMove = YES; 
     [super touchesMoved:touches withEvent:event]; 
    } 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    isProcessingListMove = NO; 
    [super touchesEnded:touches withEvent:event]; 
} 
// End of swipe 

Toute entrée est appréciée.

Répondre

1

Vous pouvez sous-classer UIImagePickerController et UIWebView et y ajouter ces vues de capture gestuelle, tant que votre détection de mouvement peut toujours passer des touches aux vues sous-jacentes bien sûr.

+0

Oui, mais j'ai des erreurs parce que ce ne sont pas des vues. – intl

+0

'UIImagePickerController' est un contrôleur avec une propriété' view'. Et 'UIWebView' hérite de' UIView'. –