2011-05-04 4 views
1

Je détecte un balayage sur l'écran, et il fonctionne exactement comme je le veux. La seule chose est, dans les tests, je continue à balayer encore et encore et encore et au moins 90% du temps ou plus il répond, mais de temps en temps il n'y a pas de réponse.touchesBegan ne répond pas toujours

I NSLog'd tout pour trouver le coupable et trouvé que touchesBegan n'est pas détecté du tout sur les quelques fois que cela se produit.

Voici mon code, bien que touchesBegan est même pas s'appeler ainsi le code ne devrait pas importer:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touches began!"); 
    UITouch *touch = [touches anyObject]; 
    CGPoint thisTouch = [touch locationInView:self.view]; 

    touchstartedX = thisTouch.x; 
    touchstartedY = thisTouch.y; 
} 

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

    CGPoint p = [[touches anyObject] locationInView:self.view]; 

    if ((abs(p.y - touchstartedY)) < 120) { 
     if ((p.x - touchstartedX) > 10) { 
      [self goPrevious]; 
     } else if ((p.x - touchstartedX) < -10) { 
      [self goNext]; 
     } 
    } else { NSLog(@"too much Y"); } 
} 

Toutes les idées?

Merci!

* EDIT AVEC LA SOLUTION * Voici le code que je fini par utiliser après avoir exploré UISwipeGestureRecognizer sur la suggestion de dredful:

dans .h:

UIViewController <UIGestureRecognizerDelegate> 

UISwipeGestureRecognizer *swipeLeft; 
UISwipeGestureRecognizer *swipeRight; 

@property (nonatomic, retain) UISwipeGestureRecognizer *swipeLeft; 
@property (nonatomic, retain) UISwipeGestureRecognizer *swipeRight; 

dans .m:

@synthesize swipeLeft, swipeRight; 

UIGestureRecognizer *recognizer; 
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
    self.swipeLeft = (UISwipeGestureRecognizer *)recognizer; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    self.swipeLeft = (UISwipeGestureRecognizer *)recognizer; 
    [recognizer release]; 

    recognizer; 
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
    self.swipeRight = (UISwipeGestureRecognizer *)recognizer; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    self.swipeRight = (UISwipeGestureRecognizer *)recognizer; 
    [recognizer release]; 

    [self.view addGestureRecognizer:swipeLeft];  
    [self.view addGestureRecognizer:swipeRight]; 

- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer { 

    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { 
     [self goNext]; 
    } else { 
     [self goPrevious]; 
    } 
} 

- (void)dealloc 
{ 
    [swipeLeft release]; 
    [swipeRight release]; 
    [super dealloc]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    self.swipeLeft = nil; 
    self.swipeRight = nil; 
} 

Répondre

1

Il est beaucoup plus facile à utiliser UISwipeGestureRecognizer d'Apple

// add Swipe Left 
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)]; 
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
[self.view addGestureRecognizer:swipeLeft]; 
[swipeLeft release]; 

// add Swipe Right 
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)]; 
swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
[self.view addGestureRecognizer:swipeRight]; 
[swipeRight release]; 


- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)recognizer { 
    //do something 
} 

- (void)handleSwipeRight:(UISwipeGestureRecognizer *)recognizer { 
    //do something 
} 
+0

Merci de dredful - UISwipeGestureRecognizer fonctionne très bien. – RanLearns

+0

Heureux que ça a aidé. Apple a vraiment frappé un home run avec des reconnaisseurs de gestes. Rend nos vies beaucoup plus faciles. – dredful