ios SideMenu ライブラリの使い方
アプリの左から開くサイドメニューを作りたくライブラリを探したらけっこう出てきた。こちらの使い方を調べたので簡単にまとめておく
github.com
今回やるながれはこんな感じ
1. メニュー化するViewControllerの作成
2. AppDelegateで1.で作成したViewControllerをメニューとしてセットアップ
3. メニューを開く
4. メニューを閉じて値を返す
cocoapodsまたはcarthageで他のライブラリとおなじように入れられるのでそれは省略
1. メニュー化するViewControllerの作成
今回はMenuViewControllerとかにする
MainViewController.swift
import UIKit import SideMenu class LeftMenuViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 背景色は白にする view.backgroundColor = .white // メニューとするViewControllerはナビゲーションをもつので、見た目とか調整 self.navigationController?.navigationBar.tintColor = .clear self.navigationController?.navigationBar.barStyle = UIBarStyle.black self.navigationController?.navigationBar.isTranslucent = true self.navigationController?.navigationBar.backgroundColor = .green } }
2. AppDelegateで1.で作成したViewControllerをメニューとしてセットアップ
AppDelegate.swift
import UIKit import SideMenu @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // アプリ起動時に表示するViewControllerを設定 let viewController = ViewController() let navigationController = UINavigationController(rootViewController: viewController) window = UIWindow(frame: UIScreen.main.bounds) window?.backgroundColor = UIColor.white window?.rootViewController = navigationController window?.makeKeyAndVisible() // さきほど作ったメニュー用のMenuViewControllerをSideMenuにセットする let menuViewController = MenuViewController() let menuNavigationController = SideMenuNavigationController(rootViewController: menuViewController) SideMenuManager.default.leftMenuNavigationController = menuNavigationController SideMenuManager.default.addPanGestureToPresent(toView: navigationController.navigationBar) SideMenuManager.default.addScreenEdgePanGesturesToPresent(toView: navigationController.view) // Readmeに書かれているオプションもここで指定できる leftMenuNavigationController.statusBarEndAlpha = 0 leftMenuNavigationController.menuWidth = 300 leftMenuNavigationController.enableSwipeToDismissGesture = false return true } ・・・ }
3. メニューを開く
ViewController.swift
import UIKit import SideMenu class ViewController: UIViewController { ・・・ @objc func showMenu(_ sender: UITapGestureRecognizer){ // ここでメニューが開く let menu = SideMenuManager.default.leftMenuNavigationController! present(menu, animated: true, completion: nil) } }
4. メニューを閉じて値を返す
メニュー側の画面にメニューを閉じる処理と呼び出し元に値を返してやる処理を追加
class MenuViewController: UIViewController { ・・・ @objc func onTap(_ sender: UITapGestureRecognizer){ dismiss(animated: true, completion: nil) NotificationCenter.default.post( name: Notification.Name("SelectMenuNotification"), object: nil, userInfo: ["hoge":"fuga"] // 返したいデータをセットするよ ) }
呼び出し側でメニューから値を受け取る
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // メニューからの通知を受け取れるようにするよ NotificationCenter.default.addObserver( self, selector: #selector(catchSelectMenuNotification(notification:)), name: Notification.Name("SelectMenuNotification"), object: nil ) ・・・ } @objc func catchSelectMenuNotification(notification: Notification) -> Void { // notification.userInfo にメニューからの返り値を取得できるよ } }
SideMenuのライブラリは色々あるけど今回試したのはこんな感じでした。以上です