как установить UIScreenEdgePanGestureRecognizer с двумя ребрами - PullRequest
0 голосов
/ 31 октября 2018

Я бы хотел установить EdgePanGesture для изменения моего ViewController, когда пользователь проводит пальцем влево или вправо. Только в одном направлении он отлично работает:

func addingEdgePanDetection() {
    let edgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(screenEdgeSwiped))
    edgePan.edges = .left
    view.addGestureRecognizer(edgePan)
}

но, как вы можете прочитать в документации Apple, ребра имеют тип UIRectEdge и соответствуют протоколу de OptionSet, поэтому

Вы можете добавить эти константы вместе, чтобы указать несколько ребер на в то же время.

Я попробовал три разные идеи без успеха:

1.- edgePan.edges = [UIRectEdge.left, UIRectEdge.right]
2.- edgePan.edges = UIRectEdge.left | UIRectEdge.right
3.- edgePan.edges = UIRectEdge(rawValue: UIRectEdge.left.rawValue | UIRectEdge.right.rawValue)

есть идеи? Я ищу ответ только с одним жестом Recognizer. Спасибо!

1 Ответ

0 голосов
/ 31 октября 2018

Используйте два разных UIScreenEdgePanGestureRecognizer s, чтобы позволить пользователю проводить пальцем влево и вправо.

var screenLeftEdgeRecognizer: UIScreenEdgePanGestureRecognizer!
var screenRightEdgeRecognizer: UIScreenEdgePanGestureRecognizer!

В ViewDidLoad:

screenLeftEdgeRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(rotateBall(_:)))
screenLeftEdgeRecognizer.edges = .left
view.addGestureRecognizer(screenLeftEdgeRecognizer)

screenRightEdgeRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(rotateBall(_:)))
screenRightEdgeRecognizer.edges = .right
view.addGestureRecognizer(screenRightEdgeRecognizer)

Практика:

Я пробовал то, что вы пробовали ранее в левом, правом, верхнем, нижнем, во всех случаях, таких как screenRightEdgeRecognizer.edgePan.edges = .all и т. Д., Но не добился успеха, даже если метод целевого действия не вызывается.

...