#SideMenu閱讀

SideMenu閱讀

這個(gè)開源項(xiàng)目在我的閱讀清單已經(jīng)躺了很久了,剛才看到才發(fā)現(xiàn)隔显,已經(jīng)于兩年前停更了

項(xiàng)目的效果是實(shí)現(xiàn)了多樣化的側(cè)邊滑入菜單运敢,具體可以在G站項(xiàng)目首頁看到邑遏。

初始化

ViewDidLoad的時(shí)候有一步setupSideMenu:

private func setupSideMenu() {
        // Define the menus
        SideMenuManager.default.leftMenuNavigationController = storyboard?.instantiateViewController(withIdentifier: "LeftMenuNavigationController") as? SideMenuNavigationController
        SideMenuManager.default.rightMenuNavigationController = storyboard?.instantiateViewController(withIdentifier: "RightMenuNavigationController") as? SideMenuNavigationController
        
        // Enable gestures. The left and/or right menus must be set up above for these to work.
        // Note that these continue to work on the Navigation Controller independent of the View Controller it displays!
        SideMenuManager.default.addPanGestureToPresent(toView: navigationController!.navigationBar)
        SideMenuManager.default.addScreenEdgePanGesturesToPresent(toView: view)
}

總的來說兩件事:

  • 添加左右MenuNavi
  • 添加滑動(dòng)手勢識(shí)別

視圖檢查

可以看到在左側(cè)添加了一個(gè)Navi


image.png

源碼檢查

觸發(fā)滑動(dòng)手勢的入口在handleMenuPan(_ gesture: UIPanGestureRecognizer),檢查發(fā)現(xiàn)它是每次通過menu(forLeftSide: leftSide)取navi困曙,比如左側(cè)就是leftMenuNavigationController表伦。這個(gè)leftMenuNavigationController是我們?cè)趘iewDidLoad的時(shí)候注冊(cè)的谦去。

也就是說,這個(gè)sideNav是長期持有的蹦哼,這一點(diǎn)鳄哭,在對(duì)象檢查里也可以看到


image.png

并且,其持有的VC也一直在內(nèi)存里纲熏,當(dāng)然妆丘,viewDidDisappear肯定是走了的。

UIViewControllerAnimatedTransitioning

要實(shí)現(xiàn)這種基于VC的定制化跳轉(zhuǎn)赤套,肯定繞不開UIViewControllerTransitioningDelegate飘痛,在SideMenu里,這個(gè)類叫做SideMenuTransitionController

UIViewControllerAnimatedTransitioning的實(shí)現(xiàn)類叫做SideMenuAnimationController

Print

Print這個(gè)寫法也很有意思
比如cannotPush這個(gè)case容握,它利用了Swift支持String Enum的形式宣脉,用enum作為錯(cuò)誤類型枚舉,同時(shí)呢剔氏,又在里面植入了%@塑猖,在使用的時(shí)候,通過Print.warning(.cannotPush, arguments: String(describing: potentialNavigationController.self), required: true)這樣的形式把參數(shù)傳入谈跛,實(shí)現(xiàn)一個(gè)非常不錯(cuò)的日志效果羊苟。

但是有點(diǎn)遺憾的是,這里沒有支持參數(shù)檢查比如我增加了無用參數(shù)或者參數(shù)類型不對(duì)感憾,都不能發(fā)出warning蜡励,但運(yùn)行時(shí)可能會(huì)因?yàn)槿雲(yún)㈩愋筒黄ヅ浒l(fā)生BAD ACCESS crash

局限

在SideMenu打開時(shí)原本頁面不能滑動(dòng),畢竟它在sideMenuTransitionController(:didPresent:)里給superVIew添加了一個(gè)點(diǎn)擊和滑動(dòng)手勢用來關(guān)閉SideMenu
但是我把這兩個(gè)手勢注釋掉之后阻桅,仍然不能滑動(dòng)凉倚,原因在于為了防止手勢觸發(fā)沖突,在彈出時(shí)設(shè)置了isUserInteractionEnabled=false嫂沉,這些注釋掉之后稽寒,就可以做到彈出時(shí)原本頁面也可以滑動(dòng)了

檢查發(fā)現(xiàn)這個(gè)星空背景是UITransitionView的,也挺有意思

點(diǎn)贊

總體來說這個(gè)庫還是寫的很不錯(cuò)的,封裝的很棒趟章,支持的效果多杏糙,實(shí)現(xiàn)的各種效果也很好,算是一個(gè)很酷的組件
項(xiàng)目源碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚓土,一起剝皮案震驚了整個(gè)濱河市宏侍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜀漆,老刑警劉巖负芋,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡旧蛾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門蠕嫁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锨天,“玉大人,你說我怎么就攤上這事剃毒〔“溃” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵赘阀,是天一觀的道長益缠。 經(jīng)常有香客問我,道長基公,這世上最難降的妖魔是什么幅慌? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮轰豆,結(jié)果婚禮上胰伍,老公的妹妹穿的比我還像新娘。我一直安慰自己酸休,他們只是感情好骂租,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斑司,像睡著了一般渗饮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宿刮,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天互站,我揣著相機(jī)與錄音,去河邊找鬼糙置。 笑死云茸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谤饭。 我是一名探鬼主播标捺,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揉抵!你這毒婦竟也來了亡容?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤冤今,失蹤者是張志新(化名)和其女友劉穎闺兢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屋谭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年脚囊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桐磁。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悔耘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出我擂,到底是詐尸還是另有隱情衬以,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布校摩,位于F島的核電站看峻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏衙吩。R本人自食惡果不足惜互妓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望分井。 院中可真熱鬧车猬,春花似錦、人聲如沸尺锚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘫辩。三九已至伏嗜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伐厌,已是汗流浹背承绸。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挣轨,地道東北人军熏。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像卷扮,于是被迫代替她去往敵國和親荡澎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多晤锹,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1摩幔,想要解決就用__block...
    炙冰閱讀 2,473評(píng)論 1 14
  • 1.設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式鞭铆,并簡要敘述或衡? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類...
    司馬DE晴空閱讀 1,278評(píng)論 0 7
  • 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式封断,并簡要敘述斯辰? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類型的...
    Jt_Self閱讀 736評(píng)論 0 4
  • 設(shè)計(jì)模式是什么坡疼? 你知道哪些設(shè)計(jì)模式椒涯,并簡要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)回梧,就是用比較成熟的邏輯去處理某一種類型的...
    small_Sun閱讀 450評(píng)論 0 4
  • 用到的組件 1、通過CocoaPods安裝 2祖搓、第三方類庫安裝 3狱意、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,602評(píng)論 1 180