【问题标题】:how to set UIScreenEdgePanGestureRecognizer with two edges如何用两条边设置 UIScreenEdgePanGestureRecognizer
【发布时间】:2018-10-31 15:35:27
【问题描述】:

我想设置一个 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)

有什么想法吗?我正在寻找只有一个手势识别器的答案。谢谢!

【问题讨论】:

  • 这里的“没有成功”是什么意思?
  • 表示手势在任何方向都不起作用!

标签: ios swift swipe gesture edges


【解决方案1】:

使用两个不同的UIScreenEdgePanGestureRecognizers 允许用户左右滑动。

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 等所有情况下尝试过的方法。但即使没有调用目标操作方法也没有成功。

【讨论】:

  • 感谢您的回答。你是对的,但我只想在 GestureRecognizer 上为两个方向创建。也许不可能!
  • @abanet 这是不可能的。尽管属性的名称是复数形式并且尽管UIRectEdgeOptionSet,但UIScreenEdgePanGestureRecognizer 仅适用于单个边缘,因此您必须创建两个手势识别器。如果需要,两者都可以使用相同的选择器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2011-08-24
相关资源
最近更新 更多