Экраны перехода слева направо? - PullRequest
0 голосов
/ 19 мая 2018

Я хотел бы создать переход.Я использую Swift.Я хочу, чтобы новый View Controller скользил слева.Это означает, что предыдущий View Controller будет выдвигаться слева направо.Я пробовал сегменты Push, Replace, Present Modally и Present as Popover, но ни один из них не сделал переход слева направо.Они либо имеют переход справа налево, либо новый экран появляется в нижней части экрана.Как я могу сделать переход слева направо?Спасибо.

1 Ответ

0 голосов
/ 19 мая 2018

Вы можете написать собственный переход, который не будет слишком сложным, но если вы не хотите идти по этому пути, это простое исправление, которое будет работать.Нажмите на переход и отмените / отключите анимацию в переходе.Тогда в prepareForSegue используйте это.

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let _ = segue.destination as? NextViewController{
            let trans = CATransition()
            trans.type = kCATransitionMoveIn
            trans.subtype = kCATransitionFromLeft
            trans.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            trans.duration = 0.35
            self.navigationController?.view.layer.add(trans, forKey: nil)
        }
    }

Не стесняйтесь исследовать другие варианты с CATransition types .Вы можете серьезно повеселиться с ними.Теперь я предполагаю, что вы хотите иметь реверс для нажатия кнопки «назад» в следующем представлении контроллеров.Вам придется заменить кнопку «Назад» и перехватить назад, нажмите и выскочит без анимации, чтобы вы могли добавить свою собственную анимацию.Вот как это выглядело бы.

 override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(backTapped))
}

@objc func backTapped() {
    let trans = CATransition()
    trans.type = kCATransitionMoveIn
    trans.subtype = kCATransitionFromRight
    trans.duration = 0.3
    self.navigationController?.view.layer.add(trans, forKey: nil)
    navigationController?.popViewController(animated: false)
}

Опять же, другой вариант будет использовать UIViewControllerAnimatedTransitioning , но в зависимости от вашего уровня навыков и комфорта с анимациями я нахожу выше простую реализацию.

...