Не можете вернуться к оригинальному ViewController с .left? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть 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 не работает вообще ...

enter image description here

...