iOS-想自己做SideMenu 可以先了解Push和Pop功能

很多App裡面都會有side menu的功能,而github上也有很多人開源了side menu的工具給大家用,比如yahoo工程師的RESideMenu,已經有4000多個Star了。

很感謝開源社區,讓我們現在一個人也能做很多事情了,比如開發一套多功能的App(設計網路、圖片緩存、本地數據庫等等)。

一開始我們要學會怎麼用別人做好的輪子,後面想要變得更厲害,就要去看別人怎麼造輪子的,甚至開始造自己的輪子了:D

開始動手前

我們一般用到有side menu的library,都會看到他們提供我們設置leftViewController、ContentViewController這種方法。

比如使用RESideMenu的時候:

我以前使用的時候都不會去想它是怎麼去操作三個ViewController或者這三個ViewController的View的。

其實可以先了解我們經常用的UINavigationController

我們常常用到Push和Pop兩個方法:

stackPushPop_2x

UINavigationController是一個容器,放入(Push)和拿出(Pop)都是從最外層開始操作。

我們學iOS開發,接觸容器的時候,常常學到這裡就結束了,我們沒有去研究到底Push和Pop做了些什麼事情。

其實Push的時候做了這幾件事情:

  1. 將leftViewController加入到容器(父控制器)中。 addChildViewController
  2. 設置子控制器的view大小。
  3. 將子控制器的View加入到容器view(父視圖)當中。
  4. 通知控制器已經加入到容器(父控制器)中。

而Pop做了這幾件事情:

  1.  通知子控制器,將會從容器(父控制器)中被移除。
  2. 將子控制器的view從容器視圖(父視圖)中移除。
  3. 將子控制器從(容器)父控制器中移除。

馬上實現SideMenu

sideMenu

  • 黃色的部分:leftViewController.
  • 紫色的部分:contentViewController.

通過點擊「左邊」這個按鈕來控制leftViewController的View,就能達到「叫出」菜單的功能。
(我這裡的實現方式只是將leftViewController的view從x = -300變成x = -100以及透明度的變化)

而LeftViewController可以簡單的用UITableViewController去實現,顯示出menu的內容。
當用戶點擊tableView中的cell時,再去做想要的變化。

比如我ContentViewController是一個UINavigationController,我就呼叫ContentViewController去Push一個PeopleViewController。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *