iOS
UIGestureRecognizer
Ricerca…
UITapGestureRecognizer
Inizializza UITapGestureRecognizer
con un target, self
in questo caso e action
che è un metodo con un singolo parametro: un UITapGestureRecognizer
.
Dopo l'inizializzazione, aggiungilo alla vista in cui dovrebbe riconoscere i tap in.
veloce
override func viewDidLoad() {
super.viewDidLoad()
let recognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
view.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer) {
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *recognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleTap:)];
[self.view addGestureRecognizer:recognizer];
}
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
}
Esempio di eliminazione della tastiera tramite UITapGestureRecognizer:
Innanzitutto, si crea la funzione per il rifiuto della tastiera:
func dismissKeyboard() {
view.endEditing(true)
}
Quindi, aggiungi un riconoscitore di gesti tocco nel controller di visualizzazione, chiamando il metodo appena creato
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
Esempio di ottenere la posizione del gesto UITapGestureRecognizer (Swift 3):
func handleTap(gestureRecognizer: UITapGestureRecognizer) {
print("tap working")
if gestureRecognizer.state == UIGestureRecognizerState.recognized
{
print(gestureRecognizer.location(in: gestureRecognizer.view))
}
}
UIPanGestureRecognizer
I riconoscimenti dei gesti di Pan rilevano i gesti di trascinamento. L'esempio seguente aggiunge un'immagine a un controller di visualizzazione e consente all'utente di trascinarlo sullo schermo.
Objective-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];
}
veloce
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)
}
Nota: sebbene
UIPanGestureRecognizer
sia utile per rilevare qualsiasi movimento di trascinamento, se si desidera rilevare un gesto di base come l'utente che trascina il dito verso sinistra / destra o su / giù, utilizzareUISwipeGestureRecognizer
.UIPanGestureRecognizer
è una scelta migliore se hai bisogno di accedere a metodi cometranslationInView:
ovelocityInView:
UITapGestureRecognizer (Double Tap)
Il doppio tocco, come un singolo tocco, utilizza anche UITapGestureRecognizer
. Devi semplicemente impostare numberOfTapsRequired
su 2
.
veloce
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"
}
Gli appunti
- Un esempio di progetto può essere trovato qui .
- È possibile riconoscere un tocco triplo impostando il
numberOfTapsRequired
dinumberOfTapsRequired
su3
.
UILongPressGestureRecognizer
UILongPressGestureRecognizer
ti consente di ascoltare una pressione prolungata su una vista. È possibile impostare la durata del ritardo prima che venga chiamato il metodo di azione.
veloce
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"
}
}
Gli appunti
Un progetto di esempio più completo può essere trovato qui .
Modificare la
minimumPressDuration
per impostare la lunghezza della pressione prolungata.
UISwipeGestureRecognizer
I gesti di scorrimento consentono di ascoltare l'utente spostando rapidamente il dito sullo schermo in una determinata direzione.
veloce
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"
}
}
Objective-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");
}
}
Gli appunti
- Un esempio di progetto più completo può essere trovato qui .
UIPinchGestureRecognizer
I pizzichi sono un gesto a due dita in cui le dita si avvicinano o si allontanano l'una dall'altra. Questo gesto è generalmente utilizzato per ridimensionare una vista.
veloce
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
}
}
Gli appunti
- Un esempio di progetto più completo può essere trovato qui .
UIRotationGestureRecognizer
Con UIRotationGestureRecognizer
possibile ascoltare due dita che ruotano attorno a un centro. Questo è generalmente usato per ruotare una vista.
veloce
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
}
}
Gli appunti
- Un esempio di progetto può essere trovato qui .
Aggiunta di un riconoscimento gestuale in Interface Builder
Trascina un riconoscitore di gesti dalla libreria degli oggetti sulla tua vista.
Controlla il trascinamento dal gesto nella struttura del documento al codice del controller di visualizzazione per creare un punto vendita e un'azione.
Gli appunti
- Questo esempio proviene da questo progetto di esempio più completo che dimostra i riconoscimenti gestuali.