在另一个 class 中滑动手势识别器
swipe gesture recognizer in another class
我有一个 ViewController 连接到第二个视图 SecondViewController,我想使用 UIGesture
从一个视图切换到另一个视图
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let svc = SecondViewController()
let leftSwipe = UISwipeGestureRecognizer(target: svc, action: #selector(svc.swipeAction(swipe:)))
leftSwipe.direction = UISwipeGestureRecognizerDirection.left
self.view.addGestureRecognizer(leftSwipe)
}
}
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(swipeAction(swipe:)))
rightSwipe.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(rightSwipe)
// Do any additional setup after loading the view.
}
@objc func swipeAction(swipe: UISwipeGestureRecognizer)
{
print(swipe.direction.rawValue)
switch swipe.direction.rawValue {
case 1:
performSegue(withIdentifier: "toTheLeft", sender: self)
case 2:
performSegue(withIdentifier: "toTheRight", sender: self)
default:
break
}
}
}
代码无效,没有任何反应,也没有错误消息。
问题是 svc
在 viewDidLoad
结束时超出范围,您的 SecondViewController
实例被释放。
使 svc
成为 ViewController
的 属性。当您希望显示第二个视图控制器时,显示存储在 svc
属性.
中的实例
请记住,将另一个视图控制器设置为第一个视图控制器中的手势处理程序毫无意义。
UISwipeGestureRecognizer
的目标应该是 self
在两个视图控制器中,并在两个视图控制器中分别实现 swipeAction
。
我有一个 ViewController 连接到第二个视图 SecondViewController,我想使用 UIGesture
从一个视图切换到另一个视图class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let svc = SecondViewController()
let leftSwipe = UISwipeGestureRecognizer(target: svc, action: #selector(svc.swipeAction(swipe:)))
leftSwipe.direction = UISwipeGestureRecognizerDirection.left
self.view.addGestureRecognizer(leftSwipe)
}
}
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(swipeAction(swipe:)))
rightSwipe.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(rightSwipe)
// Do any additional setup after loading the view.
}
@objc func swipeAction(swipe: UISwipeGestureRecognizer)
{
print(swipe.direction.rawValue)
switch swipe.direction.rawValue {
case 1:
performSegue(withIdentifier: "toTheLeft", sender: self)
case 2:
performSegue(withIdentifier: "toTheRight", sender: self)
default:
break
}
}
}
代码无效,没有任何反应,也没有错误消息。
问题是 svc
在 viewDidLoad
结束时超出范围,您的 SecondViewController
实例被释放。
使 svc
成为 ViewController
的 属性。当您希望显示第二个视图控制器时,显示存储在 svc
属性.
请记住,将另一个视图控制器设置为第一个视图控制器中的手势处理程序毫无意义。
UISwipeGestureRecognizer
的目标应该是 self
在两个视图控制器中,并在两个视图控制器中分别实现 swipeAction
。