Swift - 第三方侧栏菜单组件SideMenu使用详解4(全局配置1:基础功能、样式)
作者:hangge | 2019-03-22 08:10
通过 SideMenuManager.default 的各种配置属性,我们可以对 SideMenu 的各个功能特性进行全局设置。
五、菜单基本功能的全局配置
1,通过边缘滑动展开侧栏菜单
(1)在之前的文章中我们都是通过点击一个按钮来展开侧栏菜单,下面代码高亮部分增加边缘滑动打开菜单功能。
import UIKit import SideMenu // 主视图控制器 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 定义一个侧栏菜单 let menu = UISideMenuNavigationController(rootViewController: MenuViewController()) menu.isNavigationBarHidden = true //侧栏菜单不显示导航栏 // 将其作为默认的右侧菜单 SideMenuManager.default.menuLeftNavigationController = menu // 开启通过边缘滑动打开侧栏菜单的功能 SideMenuManager.default.menuAddPanGestureToPresent(toView: self.navigationController!.navigationBar) SideMenuManager.default.menuAddScreenEdgePanGesturesToPresent(toView: self.navigationController!.view) } }
(2)运行结果如下:
- 虽然主界面上没有菜单按钮,但我们可以通过手指在屏幕左侧边缘向右滑动来打开侧栏菜单。
- 展开的程度根据滑动距离实时变化。
2,阻止菜单出现时,状态栏变黑
从上面的效果图中可以看到,当侧栏菜单出现时,顶部的状态栏背景也会随之逐渐变黑。我们可以通过 menuFadeStatusBar 属性将其关闭,效果如下:
// 阻止状态栏背景变黑 SideMenuManager.default.menuFadeStatusBar = false
3,侧栏菜单的展示形式
(1)通过 menuPresentMode 属性可以改变侧栏菜单相对于当前视图的展示形式,有如下 4 种可选值:
- menuSlideIn:菜单从外部滑入,覆盖在当前视图上。
- viewSlideOut:当前视图向外滑出,露出下方的菜单(默认值)
- viewSlideInOut:当前视图向外滑出,下方的菜单同步滑入。
- menuDissolveIn:当前视图不动,菜单逐渐显示出来覆盖在当前视图上。
(2)下面是将其设置为 menuSlideIn 的效果:
// 菜单从外部滑入,覆盖在当前视图上。 SideMenuManager.default.menuPresentMode = .menuSlideIn
4,修改侧栏宽度
(1)默认情况下侧栏宽度是屏幕宽度的 75%,我们可以通过 menuWidth 属性对其进行修改。比如下面改成屏幕宽度的一半:
// 将侧栏宽度设置为屏幕宽度的一半 let screenWidth = UIScreen.main.bounds.width // 屏幕宽度 let screenHeight = UIScreen.main.bounds.height // 屏幕高度 SideMenuManager.default.menuWidth = round(min(screenWidth, screenHeight) * 0.5)
(2)上面是对所有菜单进行全局的设置,我们还是可以通过 UISideMenuNavigationController 对象的 menuWidth 属性来单独对某个菜单宽度进行设置。
// 定义一个侧栏菜单 let menu = UISideMenuNavigationController(rootViewController: MenuViewController()) menu.menuWidth = 100 SideMenuManager.default.menuLeftNavigationController = menu
5,菜单与主视图之间的阴影透明度
默认情况下阴影透明度为 0.5,下面将其设置为 0(即不显示阴影)// 将阴影透明度设为0 SideMenuManager.default.menuShadowOpacity = 0
6,菜单与主视图之间的阴影颜色
// 阴影颜色 SideMenuManager.default.menuShadowColor = .orange
7,阴影半径(阴影距离)
// 阴影距离 SideMenuManager.default.menuShadowRadius = 20
8,当新视图 push 进来时,当前显示的菜单行为
(1)默认情况下,如果侧栏菜单正在显示,这时 push 一个新视图进来,侧栏菜单会自动关闭。我们可以设置如下属性使其不自定关闭:
// 新视图进来时,菜单不自动隐藏 SideMenuManager.default.menuDismissOnPush = false
(2)默认情况下,如果新视图 push 进行时,侧栏菜单自动关闭时没有动画效果的。我们可以设置如下属性使仍有动画效果:
// 新视图进来时,菜单隐藏过程由动画效果 SideMenuManager.default.menuAlwaysAnimate = true
9,同时存在多种菜单样式
(1)如果 App 种只存在一个侧栏菜单,或者一种样式的侧栏菜单,我们直接使用 SideMenuManager.default 来设置全局样式即可。
(2)如果 App 里需要多种不同的样式侧栏菜单时,我们可以创建多个 SideMenuManager 实例化对象来使用。比如下面样例,左侧菜单和右侧菜单使用完全不一样的配置:
import UIKit import SideMenu // 主视图控制器 class ViewController: UIViewController { // 左侧菜单控制器 let leftSideMenuManager = SideMenuManager() // 右侧菜单控制器 let rightSideMenuManager = SideMenuManager() override func viewDidLoad() { super.viewDidLoad() // 定义左侧栏菜单 let leftMenu = UISideMenuNavigationController(rootViewController: MenuViewController()) leftMenu.isNavigationBarHidden = true //侧栏菜单不显示导航栏 leftSideMenuManager.menuShadowColor = .red // 阴影为红色 leftSideMenuManager.menuLeftNavigationController = leftMenu // 定义右侧栏菜单 let rightMenu = UISideMenuNavigationController(rootViewController: MenuViewController()) rightMenu.isNavigationBarHidden = true //侧栏菜单不显示导航栏 rightSideMenuManager.menuShadowColor = .green // 阴影为绿色 rightSideMenuManager.menuRightNavigationController = rightMenu } // 显示左侧菜单 @IBAction func showLeftMenu(_ sender: Any) { // 显示侧栏菜单 self.present(leftSideMenuManager.menuLeftNavigationController!, animated: true, completion: nil) } // 显示右侧菜单 @IBAction func showRightMenu(_ sender: Any) { // 显示侧栏菜单 self.present(rightSideMenuManager.menuRightNavigationController!, animated: true, completion: nil) } }
全部评论(0)