2011-07-19 5 views
0

Donc j'essaye de créer une application qui change une étiquette basée sur la direction que vous balayez. Cependant, au lieu d'être capable de glisser n'importe où sur l'écran, je voudrais seulement glisser sur une vue spécifique. J'ai mis une nouvelle vue sur le fichier .xib et utilisé cette vue pour l'emplacement des touches et l'ai nommé leftView, mais il utilise toujours l'écran entier. J'utilise une méthode touchesBegan et touchesMoved pour pouvoir utiliser des diagonales. est ici un peu du code J'utilise:Plusieurs vues de balayage

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [touches anyObject]; 
gestureStartPoint = [touch locationInView:leftView]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [touches anyObject]; 
CGPoint currentPosition = [touch locationInView:leftView]; 
CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); 
CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); 
if ((deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) && currentPosition.x < gestureStartPoint.x){ 
    label.text = @"Left Horizontal swipe detected"; 
} 
else if((deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) && currentPosition.x > gestureStartPoint.x){ 
    label.text = @"Right Horizontal swipe detected"; 
} 
else if ((deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance) && currentPosition.y < gestureStartPoint.y){ 
    label.text = @"Up Vertical swipe detected"; 
} 
else if ((deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance) && currentPosition.y > gestureStartPoint.y){ 
    label.text = @"Down Vertical swipe detected"; 
} 

Répondre

2

Vous pouvez réaliser ce que vous êtes après en ajoutant deux UIGestureRecognizer s (un pour glisser vers la droite et un autre pour mouvement vers la gauche) à la UIView que vous voulez recevoir les balayages.

La référence SimpleGestureRecognizer sample project d'Apple illustre parfaitement cette configuration.

0

Vérifiez l'inspecteur d'identité si la classe uiview est sélectionnée pour l'objet UIView dans l'organiseur. Je suppose que vous avez implémenté la méthode touchesBegan dans la sous-classe de UIView.