iOS
UIGestureRecognizer
Zoeken…
UITapGestureRecognizer
Initialiseer de UITapGestureRecognizer
met een doel, self
in dit geval, en een action
die een werkwijze die een enkele parameter: a UITapGestureRecognizer
.
Na initialisatie, voeg het toe aan de weergave dat het tikken zou moeten herkennen.
Snel
override func viewDidLoad() {
super.viewDidLoad()
let recognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
view.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer) {
}
Doelstelling C
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *recognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleTap:)];
[self.view addGestureRecognizer:recognizer];
}
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
}
Voorbeeld van toetsenbordontslag via UITapGestureRecognizer:
Eerst maakt u de functie voor het sluiten van het toetsenbord:
func dismissKeyboard() {
view.endEditing(true)
}
Vervolgens voegt u een tikgebaarherkenning toe aan uw viewcontroller en roept u de methode aan die we zojuist hebben gemaakt
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
Voorbeeld van het verkrijgen van gebarenlocatie UITapGestureRecognizer (Swift 3):
func handleTap(gestureRecognizer: UITapGestureRecognizer) {
print("tap working")
if gestureRecognizer.state == UIGestureRecognizerState.recognized
{
print(gestureRecognizer.location(in: gestureRecognizer.view))
}
}
UIPanGestureRecognizer
Pangebaarherkenners detecteren sleepbewegingen. In het volgende voorbeeld wordt een afbeelding toegevoegd aan een weergavecontroller en kan de gebruiker deze op het scherm rondslepen.
Doelstelling 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];
}
Snel
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)
}
Opmerking: hoewel
UIPanGestureRecognizer
handig is voor het detecteren vanUISwipeGestureRecognizer
, kunt uUISwipeGestureRecognizer
gebruiken als u alleen een basisgebaar wilt detecteren, zoals gebruikers die hun vinger naar links / rechts of omhoog / omlaagUISwipeGestureRecognizer
.UIPanGestureRecognizer
is een betere keuze als u toegang nodig hebt tot methoden zoalstranslationInView:
ofvelocityInView:
UITapGestureRecognizer (dubbeltikken)
De dubbele tik, zoals een enkele tik, maakt ook gebruik van de UITapGestureRecognizer
. U stelt eenvoudig het numberOfTapsRequired
op 2
.
Snel
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"
}
Notes
- Een voorbeeld project kan worden gevonden hier .
- U zou een drievoudige tik kunnen herkennen door het
numberOfTapsRequired
op3
.
UILongPressGestureRecognizer
Met de UILongPressGestureRecognizer
kun je lang naar een weergave luisteren. U kunt de vertraging instellen voordat de actiemethode wordt aangeroepen.
Snel
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"
}
}
Notes
Een vollediger monster project kan worden gevonden hier .
Wijzig de
minimumPressDuration
om de lengte van de lange druk in te stellen.
UISwipeGestureRecognizer
Met veegbewegingen kunt u luisteren naar de gebruiker die zijn vinger snel over het scherm beweegt in een bepaalde richting.
Snel
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"
}
}
Doelstelling 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");
}
}
Notes
- Een vollediger project voorbeeld kan worden gevonden hier .
UIPinchGestureRecognizer
Pinches zijn een gebaar met twee vingers waarbij de vingers dichter of verder van elkaar af bewegen. Dit gebaar wordt meestal gebruikt om het formaat van een weergave te wijzigen.
Snel
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
}
}
Notes
- Een vollediger project voorbeeld kan worden gevonden hier .
UIRotationGestureRecognizer
Met de UIRotationGestureRecognizer
kan worden geluisterd naar twee vingers die rond een midden UIRotationGestureRecognizer
. Dit wordt meestal gebruikt om een beeld te roteren.
Snel
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
}
}
Notes
- Een voorbeeld project kan worden gevonden hier .
Een gebaarherkenning toevoegen in de Interface Builder
Sleep een gebaarherkenner uit de objectbibliotheek naar uw weergave.
Control slepen van het gebaar in de Documentoverzicht naar uw View Controller-code om een Outlet en een Action te maken.
Notes
- Dit voorbeeld komt uit dit uitgebreidere voorbeeldproject dat gebaarherkenners demonstreert.