Swift實現側滑選單SWRevealViewController
阿新 • • 發佈:2018-11-05
SWRevealViewController Github下載地址
匯入
我這裡直接新建一個SWRevealViewController包,然後把程式碼直接貼上進入
在橋接檔案中匯入
#import “SWRevealViewController.h”
使用
編譯一下,接著新建一個MainController父容器,繼承SWRevealViewController
import UIKit
class MainController: SWRevealViewController{
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
建立左側選單欄RightMenuController
import UIKit
class RightMenuController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.greenColor()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
在需要開啟MainController把初始佈局和左側佈局加上
let one = UINavigationController(rootViewController: ViewController())
let view = MainController(rearViewController: RightMenuController(), frontViewController: one)
presentViewC(view)//開啟頁面的方法
在ViewController中加入手勢
if self.revealViewController() != nil {
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
執行程式,已經可以看到側滑選單實現了
我們也可以增加左側按鈕的點選事件
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "選單", style: .Done, target: self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)))
也可以更改選單欄寬度
self.revealViewController().rearViewRevealWidth = 100
選單欄切換佈局
在RightMenuController中新增兩個按鈕,並實現方法
import UIKit
class RightMenuController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.greenColor()
// Do any additional setup after loading the view.
let b1 = UIButton(frame: CGRect(x: 0, y: 40, width: 100, height: 40))
b1.setTitle("b1", forState: .Normal)
b1.tag = 1
b1.addTarget(self, action: #selector(self.actionBtn(_:)), forControlEvents: .TouchUpInside)
self.view.addSubview(b1)
let b2 = UIButton(frame: CGRect(x: 0, y: 100, width: 100, height: 40))
b2.setTitle("b2", forState: .Normal)
b2.tag = 2
b2.addTarget(self, action: #selector(self.actionBtn(_:)), forControlEvents: .TouchUpInside)
self.view.addSubview(b2)
}
func actionBtn(sender:UIButton){
var ui:UIViewController!
if sender.tag == 1{
ui = ViewController()
}
if sender.tag == 2{
ui = WXController()
}
let main = UINavigationController(rootViewController: ui)
self.revealViewController().pushFrontViewController(main, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
在WXCotroller中寫入和ViewController相同的程式碼
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "選單", style: .Done, target: self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)))
self.view.backgroundColor = UIColor.whiteColor()
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
執行效果
SWRevealViewController包中還可以實現右側選單,兩重選單,這裡就不說了。