Вот что я пытаюсь сделать:
Реализация боковой навигации, которая будет скользить с пользовательской анимацией слева направо
Я ссылаюсь на это:https://www.thorntech.com/2016/03/ios-tutorial-make-interactive-slide-menu-swift/
Но этот и все другие учебники, которые реализуют эту функцию, используют segues для представления представления.
Так что их код здесь:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if let destinationViewController = segue.destinationViewController as? MenuViewController {
destinationViewController.transitioningDelegate = self
}
}
Но это не вариант для меня!
Весь мой контроллер представления создается кодом,Прямо сейчас это фиктивный контроллер вида, и я просто пытаюсь заставить его скользить слева направо.
import UIKit
class SideNavVC: UIViewController {
static let sideNav = SideNavVC()
override func viewDidLoad() {
super.viewDidLoad()
let dummyView = UIView(frame: CGRect(x: 10, y: 200, width: 100, height: 100))
dummyView.backgroundColor = accentColor
view.addSubview(dummyView)
let closeBtn = UIButton(frame: CGRect(x: 4, y: 30, width: 200, height: 20))
closeBtn.addTarget(self, action: #selector(closeViewTapped), for: .touchUpInside)
closeBtn.setTitle("Close", for: .normal)
view.addSubview(closeBtn)
view.backgroundColor = confirmGreen
}
@objc func closeViewTapped(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
}
И я застрял на этом шаге урока: https://www.thorntech.com/2016/03/ios-tutorial-make-interactive-slide-menu-swift/#four
Вот как я пытаюсь установить делегата на себя:
func addSlideGesture() {
let edgeSlide = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(presentSideNav))
edgeSlide.edges = .left
view.addGestureRecognizer(edgeSlide)
}
@objc func presentSideNav() {
if presentedViewController != SideNavVC.sideNav {
SideNavVC.sideNav.transitioningDelegate = self
SideNavVC.sideNav.modalPresentationStyle = .custom
self.present(SideNavVC.sideNav, animated: true, completion: nil)
}
}
Здесь я реализовывал свой делегат (MainVC - это то, откуда пользователь будет скользить вправо)
extension MainVC: UIViewControllerTransitioningDelegate {
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
print("Source: \(source)")
print("Destination \(presenting)")
if source == self && presenting == SideNavVC.sideNav {
print("PRESENTING SIDE NAV")
return RevealSideNav()
}
return nil
}
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
//Added a break point here. It is hitting.
return nil
}
}
Поскольку мой делегат не звонил, я решил добавить presentationController (forPresented, представляя, источник) и поставил точку останова, которая била.Поэтому я подозреваю, что мне не хватает какой-то части кода, которая должна быть там введена.
Когда я его погуглил, я нашел это руководство по UIPresentationController https://www.raywenderlich.com/915-uipresentationcontroller-tutorial-getting-started
Но по мере того, как я проходил через это, все больше и больше это начинало меня смущать.
Я уверен, что есть небольшая часть, которую мне не хватает.Потому что, если он работает, когда делегат настроен на подготовку к переходу, он также должен работать при вызове present (_, анимированный, завершение)
Может кто-нибудь указать мне правильное направление?Как получить пользовательские анимации для запуска и методы делегата для вызова?Кто-нибудь знает учебник, который учит, как сделать это, используя только код и без раскадровки?