MMDrawerController 是 iOS 經典側滑選單庫,支援左右雙抽屜、多種動畫、手勢控制、視覺狀態自定義。Swift 專案可透過 Bridging Header 或 Swift Package Manager 整合。
var drawer: MMDrawerController!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let width = UIScreen.main.bounds.width
let leftVC = LeftViewController()
let rightVC = RightViewController()
let centerVC = ViewController()
let centerNav = UINavigationController(rootViewController: centerVC)
drawer = MMDrawerController(centerViewController: centerNav,
leftDrawerViewController: leftVC,
rightDrawerViewController: rightVC)
// 抽屜最大寬度 (螢幕 70%)
drawer.maximumLeftDrawerWidth = 0.7 * width
drawer.maximumRightDrawerWidth = 0.7 * width
// 手勢模式:全部開啟/關閉手勢
drawer.openDrawerGestureModeMask = .all
drawer.closeDrawerGestureModeMask = .all
// 自定義動畫:側欄淡入淡出
drawer.setDrawerVisualStateBlock { (drawerController, drawerSide, percentVisible) in
let sideVC = (drawerSide == .left) ? drawerController.leftDrawerViewController : drawerController.rightDrawerViewController
sideVC?.view.alpha = percentVisible
}
window?.rootViewController = drawer
return true
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let newCenterVC: UIViewController
switch indexPath.row {
case 0:
newCenterVC = ViewController()
default:
newCenterVC = TestViewController()
}
let newCenterNav = UINavigationController(rootViewController: newCenterVC)
appDelegate.drawer.centerViewController = newCenterNav
appDelegate.drawer.toggle(.left, animated: true, completion: nil)
}
| 屬性/方法 | 說明 |
|---|---|
maximumLeftDrawerWidth | 左抽屜最大開啟寬度,防止遮蓋過多主畫面 |
openDrawerGestureModeMask | 開啟手勢類型:.all、.panningCenterView、.bezelPanningCenterView 等 |
setDrawerVisualStateBlock | 動畫回調,可控制 alpha、scale、parallax 等視覺效果 |
toggle(_:animated:completion:) | 程式化開關抽屜 |