Wie erkennen Sie die Wipe -Gestenrichtung?
-
26-10-2019 - |
Frage
Ich muss die Richtung meiner Swipe -Geste erkennen und ich habe ein Problem damit. Geste funktioniert, aber ich weiß nicht, wie man die Richtung erfasst. ...
swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(detectSwipe:)];
[swipeGesture setNumberOfTouchesRequired:1];
[swipeGesture setDirection:UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp];
[appView addGestureRecognizer:swipeGesture];
-(void)detectSwipe:(UISwipeGestureRecognizer *)recognizer {
switch (recognizer.direction) {
case UISwipeGestureRecognizerDirectionUp:
NSLog(@"smth1");
break;
case UISwipeGestureRecognizerDirectionDown:
NSLog(@"smth2");
default:
break;
}
}
es funktioniert nicht :/
Lösung
Das direction
Eigentum definiert nur die erlaubt Richtungen, die als Swipes erkannt werden, nicht die tatsächlich Richtung eines bestimmten Schlags.
Am einfachsten wäre es, stattdessen zwei getrennte Gestenerkenner zu verwenden. Sie können auch den Ort der Berührung untersuchen, wenn die Geste beginnt und wenn sie mit dem endet locationInView:
Methode.
Andere Tipps
Hier ist ein Beispiel aus einem meiner Projekte:
// ...
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRight];
UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:swipeUp];
UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeDown];
// ...
- (void)didSwipe:(UISwipeGestureRecognizer*)swipe{
if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"Swipe Left");
} else if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"Swipe Right");
} else if (swipe.direction == UISwipeGestureRecognizerDirectionUp) {
NSLog(@"Swipe Up");
} else if (swipe.direction == UISwipeGestureRecognizerDirectionDown) {
NSLog(@"Swipe Down");
}
}
Erweiterung der OMZ -Lösung:
self.myView
Ist die Aussicht, die ich den Gestenerkenner anziehen möchte. Der folgende Code wird nicht getestet, ich denke, es wäre besser, die Erkenner als property
s und fügen Sie sie hinein hinzu viewDidLoad()
oder xib
Datei. self
ist ein UIViewController
.
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedLeft:)];
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft ];
[self.view addGestureRecognizer:swipeLeft];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedRight:)];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight ];
[self.view addGestureRecognizer:swipeRight];
Fügen Sie diese beiden Methoden zu Ihrem hinzu UIViewController
und fügen Sie notwendige Maßnahmen hinzu:
- (IBAction)swipedRight:(UISwipeGestureRecognizer *)recognizer
{
NSLog(@"swiped right");
}
- (IBAction)swipedLeft:(UISwipeGestureRecognizer *)recognizer
{
NSLog(@"swiped left");
}
Swipe Gestenrichtung mit Swift 5 erkennen 5
override func viewDidLoad() {
super.viewDidLoad()
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes(_:)))
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes(_:)))
leftSwipe.direction = .left
rightSwipe.direction = .right
view.addGestureRecognizer(leftSwipe)
view.addGestureRecognizer(rightSwipe)
}
@objc func handleSwipes(_ sender:UISwipeGestureRecognizer) {
if (sender.direction == .left) {
print("Swipe Left")
}
if (sender.direction == .right) {
print("Swipe Right")
}
}