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のライブラリは色々あるけど今回試したのはこんな感じでした。以上です