У меня есть viewcontroller, который встроен в контроллер навигации.Я хотел, чтобы вправо по Swipe было вправо влево и изменить viewcontroller с VC1 на VC2, что благодаря людям из stackoverflow, которые мне удалось сделать.Однако теперь я хочу пойти традиционным путем влево-вправо (традиционный путь для толчка), когда проводишь влево на VC2, который возвращается к VC1.
Это мой код в VC1 (чтобы провести вправо, чтобы перейти к VC2):
override func viewDidLoad() {
super.viewDidLoad()
//Swipe right gesture
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(SelectedTopicViewController.performChange))
gesture.direction = .right
self.view.addGestureRecognizer(gesture)
}
@objc func performChange() {
self.performSegue(withIdentifier: "goTo", sender: nil)
}
Это мой код в VC2 (для смахивания влевочтобы вернуться к VC1):
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.setNavigationBarHidden(true, animated: false)
//swipe left gesture
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(SendMessageTopicViewController.performChange))
gesture.direction = .left
self.view.addGestureRecognizer(gesture)
// Do any additional setup after loading the view.
}
@objc func performChange() {
//self.navigationController?.popViewController(animated: true)
//print("swipe detected")
self.performSegue(withIdentifier: "goBackToRight", sender: nil)
}
Также это мой пользовательский код segue (для левого и правого пролистывания):
import Foundation
import UIKit
import QuartzCore
class SegueFromLeft: UIStoryboardSegue {
override func perform() {
let src: UIViewController = self.source
let dst: UIViewController = self.destination
let transition: CATransition = CATransition()
let timeFunc : CAMediaTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.duration = 0.25
transition.timingFunction = timeFunc
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
src.navigationController!.view.layer.add(transition, forKey: kCATransition)
src.navigationController!.pushViewController(dst, animated: false)
}
}
class SegueFromRight: UIStoryboardSegue {
override func perform() {
let src = self.source
let dst = self.destination
src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width*2, y: 0) //Double the X-Axis
UIView.animate(withDuration: 0.25, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
}) { (finished) in
src.present(dst, animated: false, completion: nil)
}
}
}
И это моя раскадровка, обратите внимание, что у меня есть один переход, идущий к VC2, и один, возвращающийся к VC1 (оба пользовательских перехода, использующие разные классы).
Даже если у меня есть print("swiped")
, когда пользователь проводит по VC2, он не печатается в консоли, поэтому я считаю, что со свайпами что-то не так ...
Вывод: свайп работаетна VC1 и перейти к VC2 работает, однако свайп на VC2 не работает вообще ...