iOS
UIGestureRecognizer
Recherche…
UITapGestureRecognizer
Initialisez UITapGestureRecognizer
avec une cible, self
dans ce cas, et une action
qui est une méthode avec un seul paramètre: un UITapGestureRecognizer
.
Après l'initialisation, ajoutez-le à la vue pour qu'il reconnaisse les taps.
Rapide
override func viewDidLoad() {
super.viewDidLoad()
let recognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
view.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer) {
}
Objectif c
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *recognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleTap:)];
[self.view addGestureRecognizer:recognizer];
}
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
}
Exemple de renvoi au clavier via UITapGestureRecognizer:
Tout d'abord, vous créez la fonction de rejet du clavier:
func dismissKeyboard() {
view.endEditing(true)
}
Ensuite, vous ajoutez un identificateur de geste dans votre contrôleur de vue, en appelant la méthode que nous venons de créer.
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
Exemple d'obtention de l'emplacement de geste UITapGestureRecognizer (Swift 3):
func handleTap(gestureRecognizer: UITapGestureRecognizer) {
print("tap working")
if gestureRecognizer.state == UIGestureRecognizerState.recognized
{
print(gestureRecognizer.location(in: gestureRecognizer.view))
}
}
UIPanGestureRecognizer
Les détecteurs de mouvements de panoramique détectent les mouvements de déplacement. L'exemple suivant ajoute une image à un contrôleur de vue et permet à l'utilisateur de la faire glisser sur l'écran.
Objectif c
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"imageToDrag"]];
[imageView sizeToFit];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[imageView addGestureRecognizer:pan];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.view];
}
Rapide
override func viewDidLoad() {
super.viewDidLoad()
let imageView = UIImageView.init(image: UIImage.init(named: "imageToDrag"))
imageView.sizeToFit()
imageView.isUserInteractionEnabled = true
self.view.addSubview(imageView)
let pan = UIPanGestureRecognizer.init(target: self, action: #selector(handlePan(recognizer:)))
imageView.addGestureRecognizer(pan)
}
func handlePan(recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
view.center = CGPoint(x: view.center.x + translation.x, y: view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
}
Remarque: Bien que
UIPanGestureRecognizer
soit utile pour détecter lesUIPanGestureRecognizer
de glissement, si vous souhaitez simplement détecter un geste de base tel que faire glisser un doigt de gauche à droite ou de haut en bas, utilisezUISwipeGestureRecognizer
.UIPanGestureRecognizer
est un meilleur choix si vous avez besoin d'accéder à des méthodes telles quetranslationInView:
ouvelocityInView:
UIPanGestureRecognizer
UITapGestureRecognizer (Double Tap)
Le double tapotement, comme un simple tapotement, utilise également le UITapGestureRecognizer
. Vous définissez simplement le numberOfTapsRequired
sur 2
.
Rapide
override func viewDidLoad() {
super.viewDidLoad()
// Double Tap
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap))
doubleTapGesture.numberOfTapsRequired = 2
doubleTapView.addGestureRecognizer(doubleTapGesture)
}
// Double tap action
func handleDoubleTap() {
label.text = "Double tap recognized"
}
Remarques
- Un exemple de projet peut être trouvé ici .
- Vous pouvez reconnaître un triple tap en définissant le
numberOfTapsRequired
sur3
.
UILongPressGestureRecognizer
UILongPressGestureRecognizer
vous permet d'écouter un UILongPressGestureRecognizer
long sur une vue. Vous pouvez définir la durée du délai avant l'appel de la méthode d'action.
Rapide
override func viewDidLoad() {
super.viewDidLoad()
// Long Press
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
longPressView.addGestureRecognizer(longPressGesture)
}
// Long press action
func handleLongPress(gesture: UILongPressGestureRecognizer) {
if gesture.state == UIGestureRecognizerState.Began {
label.text = "Long press recognized"
}
}
Remarques
Un exemple de projet plus complet peut être trouvé ici .
Changez le
minimumPressDuration
pour définir la longueur de l'minimumPressDuration
long.
UISwipeGestureRecognizer
Les gestes de balayage vous permettent d'écouter l'utilisateur déplacer rapidement son doigt sur l'écran dans une certaine direction.
Rapide
override func viewDidLoad() {
super.viewDidLoad()
// Swipe (right and left)
let swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
let swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
swipeRightGesture.direction = UISwipeGestureRecognizerDirection.Right
swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.Left
swipeView.addGestureRecognizer(swipeRightGesture)
swipeView.addGestureRecognizer(swipeLeftGesture)
}
// Swipe action
func handleSwipe(gesture: UISwipeGestureRecognizer) {
label.text = "Swipe recognized"
// example task: animate view off screen
let originalLocation = swipeView.center
if gesture.direction == UISwipeGestureRecognizerDirection.Right {
label.text = "Swipe right"
} else if gesture.direction == UISwipeGestureRecognizerDirection.Left {
label.text = "Swipe left"
}
}
Objectif c
- (void)viewDidLoad
{
[super viewDidLoad];
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
// Adding the swipe gesture on image view
[self.view addGestureRecognizer:swipeLeft];
[self.view addGestureRecognizer:swipeRight];
}
//Handling Swipe Gesture Events
- (void)handleSwipe:(UISwipeGestureRecognizer *)swipe {
if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"Left Swipe");
}
if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"Right Swipe");
}
}
Remarques
- Un exemple de projet plus complet peut être trouvé ici .
UIPinchGestureRecognizer
Les pincements sont un geste à deux doigts où les doigts se rapprochent ou s’éloignent les uns des autres. Ce geste est généralement utilisé pour redimensionner une vue.
Rapide
override func viewDidLoad() {
super.viewDidLoad()
// Pinch
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(_:)))
pinchView.addGestureRecognizer(pinchGesture)
}
// Pinch action
func handlePinch(gesture: UIPinchGestureRecognizer) {
label.text = "Pinch recognized"
if gesture.state == UIGestureRecognizerState.Changed {
let transform = CGAffineTransformMakeScale(gesture.scale, gesture.scale)
pinchView.transform = transform
}
}
Remarques
- Un exemple de projet plus complet peut être trouvé ici .
UIRotationGestureRecognizer
Deux doigts qui tournent autour d'un centre peuvent être écoutés avec UIRotationGestureRecognizer
. Ceci est généralement utilisé pour faire pivoter une vue.
Rapide
override func viewDidLoad() {
super.viewDidLoad()
// Rotate
let rotateGesture = UIRotationGestureRecognizer(target: self, action: #selector(handleRotate(_:)))
rotateView.addGestureRecognizer(rotateGesture)
}
// Rotate action
func handleRotate(gesture: UIRotationGestureRecognizer) {
label.text = "Rotate recognized"
if gesture.state == UIGestureRecognizerState.Changed {
let transform = CGAffineTransformMakeRotation(gesture.rotation)
rotateView.transform = transform
}
}
Remarques
- Un exemple de projet peut être trouvé ici .
Ajout d'un dispositif de reconnaissance de mouvements dans Interface Builder
Faites glisser un identificateur de geste de la bibliothèque d'objets sur votre vue.
Contrôlez le glissement du geste dans la structure du document vers votre code View Controller afin de créer une sortie et une action.
Remarques
- Cet exemple provient de cet exemple de projet plus complet démontrant des identificateurs de gestes.