참고 [iOS Tutorial: How to make a customizable interactive slide-out menu in Swift](https://www.thorntech.com/2016/03/ios-tutorial-make-interactive-slide-menu-swift/](https://www.thorntech.com/2016/03/ios-tutorial-make-interactive-slide-menu-swift/))



Create an interactive slide-out menu using Custom View Controller Transitions

Scroll View 내부에 Container Views를 중첩하여 슬라이드 아웃 메뉴를 만들 수 있지만, 몇 가지 단점이 있다.

이 튜토리얼에서는 다음의 기능을 포함하는 interactive slide-out menu를 만든다.

1. Get Started

//  AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = MainViewController()
        return true
    }
//  MainViewController.swift
import UIKit

class MainViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .blue
        self.setNavigationBar()    
    }

    func setNavigationBar() {
        let screenSize: CGRect = UIScreen.main.bounds
        let navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: screenSize.width, height: 44))
        let navItem = UINavigationItem(title: "")
        let menuItem = UIBarButtonItem(title: "menu", style: .plain, target: self, action: #selector(goToSideMenu))
        navItem.leftBarButtonItem = menuItem
        navBar.setItems([navItem], animated: false)
        self.view.addSubview(navBar)
    }
    
    @objc func goToSideMenu() {
        let sideVC = SideViewController()
        present(sideVC, animated: true , completion: nil)
    }

}
//  SideViewController.swift
import UIKit

class SideViewController: UIViewController {
    
    let backButton: UIButton = {
        let button = UIButton()
        button.backgroundColor = .cyan
        button.setTitle("뒤로가기", for: .normal)
        return button
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red

        view.addSubview(backButton)
        backButton.translatesAutoresizingMaskIntoConstraints = false
        backButton.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -8).isActive = true
        backButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 8).isActive = true
        backButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
        backButton.heightAnchor.constraint(equalToConstant: 40).isActive = true
        
        backButton.addTarget(self, action: #selector(back), for: .touchUpInside)
    }
    
    @objc func back() {
        dismiss(animated: true, completion: nil)
    }
}

2. Add some helpful files