首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Swift 專案整合 MMDrawerController 實現側滑抽屜效果完整教學

     編輯:Java 綜合教學

MMDrawerController 簡介

MMDrawerController 是 iOS 經典側滑選單庫,支援左右雙抽屜、多種動畫、手勢控制、視覺狀態自定義。Swift 專案可透過 Bridging Header 或 Swift Package Manager 整合。

核心實作步驟

1. AppDelegate 設定根視圖控制器

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
}

2. 左側選單 TableView 點擊切換中間頁面

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)
}

關鍵配置詳解

常見問題與解決方案

  • 抽屜無法彈出:確認 window?.rootViewController = drawer 在 didFinishLaunching 中執行,且 window 不為 nil
  • 手勢衝突:中心頁面有 ScrollView 時,調整 openDrawerGestureModeMask 排除邊緣手勢
  • Swift 專案找不到類別:檢查 Bridging Header 是否正確引入 #import "MMDrawerController.h"
  • 旋轉螢幕佈局錯亂:在抽屜 VC 實作 viewWillTransition(to:with:) 更新佈局

進階客製化

  • 替換 setDrawerVisualStateBlock 實現 3D 翻轉、縮放、視差效果
  • 使用 MMDrawerVisualState 內建動畫:.parallax、.slide、.slideAndScale
  • 實作 MMDrawerControllerDelegate 監聽 drawerWillOpen/drawerDidClose 做資料刷新

側滑效果示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性/方法說明
maximumLeftDrawerWidth左抽屜最大開啟寬度,防止遮蓋過多主畫面
openDrawerGestureModeMask開啟手勢類型:.all、.panningCenterView、.bezelPanningCenterView 等
setDrawerVisualStateBlock動畫回調,可控制 alpha、scale、parallax 等視覺效果
toggle(_:animated:completion:)程式化開關抽屜