Witam Mam szybką aplikację, w której za każdym dotknięciem dotykałem funkcji, ale nie chcę, aby dzwonek był wywoływany, jeśli zamiast tego użytkownik przesuwa się. Jak mogę tego uniknąć?
Dotyki rozpoczęły się:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
//function call
}
Trzepnąć:
var Swipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
Swipe.direction = .Up
//Swipe.cancelsTouchesInView = true did not make a difference
view.addGestureRecognizer(Swipe)
Również nie chcę robić dotknięć Zakończone, ponieważ to powoduje opóźnienie, którego nie mogę mieć
Odpowiedzi:
0 dla odpowiedzi № 1Zmodyfikuj widok UIViewController jako niestandardową klasę i obsłuż tam te elementy - powinny one zostać odebrane w taki sposób, w jaki próbujesz, ale tylko w klasie UIView.
0 dla odpowiedzi nr 2
Jeśli chcesz oddzielić przeciągnięcia od dotknięć, możesz zrobić to łatwo za pomocą metody delaysTouchesBegan, na przykład:
let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedRight:"))
swipeRight.direction = .Right
swipeRight.cancelsTouchesInView = true
swipeRight.delaysTouchesBegan = true
view.addGestureRecognizer(swipeRight)
let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedLeft:"))
swipeLeft.direction = .Left
swipeLeft.cancelsTouchesInView = true
swipeLeft.delaysTouchesBegan = true
view.addGestureRecognizer(swipeLeft)
let swipeUp:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedUp:"))
swipeUp.direction = .Up
swipeUp.cancelsTouchesInView = true
swipeUp.delaysTouchesBegan = true
view.addGestureRecognizer(swipeUp)
let swipeDown:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedDown:"))
swipeDown.direction = .Down
swipeDown.cancelsTouchesInView = true
swipeDown.delaysTouchesBegan = true
view.addGestureRecognizer(swipeDown)
w twoim widokuDidLoad lub didMoveToView (jeśli jesteś w scenie spritekit)
I przygotuj odpowiednio metody:
func swipedRight(sender:UISwipeGestureRecognizer){
print("swiped right")
}
func swipedLeft(sender:UISwipeGestureRecognizer){
print("swiped left")
}
func swipedUp(sender:UISwipeGestureRecognizer){
print("swiped up")
}
func swipedDown(sender:UISwipeGestureRecognizer){
print("swiped down")
}
Następnie możesz kontrolować swoje dotknięcia przy użyciu oficjalnych metod przekazywania, takich jak:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
...// handle your touches..
}