LGI侧滑菜单控制器
用于iOS视图控制器的,通过按按钮或手势显示左视图和右视图。
预览
安装
LGI侧滑菜单控制器版本 | 最低iOS版本 | 语言 |
---|---|---|
1.0.0 - 1.0.10 | 6.0 | Objective-C |
1.1.0 - 2.2.0 | 8.0 | Objective-C |
2.3.0 | 9.0 | Objective-C |
3.0.0 | 9.0 | Swift |
含源代码
- 下载存储库
- 将 LGI侧滑菜单控制器目录 添加到你的项目中
- 享受吧!
使用 Swift 包管理器
从 Xcode 9.0 开始,您可以使用内置的 Swift 包管理器,请参阅 Apple 文档。最初支持的版本是 2.3.0
使用 CocoaPods
CocoaPods 是 Objective-C 的依赖关系管理器,它自动简化了在项目中使用第三方库的过程。使用 CocoaPods 安装,请访问 CocoaPods 的“入门”部分。
Podfile
platform :ios, '9.0'
use_frameworks!
pod 'LGSideMenuController'
然后在需要使用库的地方导入框架
import LGSideMenuController
使用 Carthage
Carthage 是 Swift 和 Objective-C 的轻量级依赖关系管理器。它利用 CocoaTouch 模块,并且比 CocoaPods 更不具侵入性。使用 Carthage 安装,请遵循 Carthage 上的说明。
Cartfile
github "Friend-LGA/LGSideMenuController"
然后在需要使用库的地方导入框架
import LGSideMenuController
用法
初始化
您可以使用视图控制器或视图来初始化 LGSideMenuController
public init()
public init(rootViewController: UIViewController?,
leftViewController: UIViewController?,
rightViewController: UIViewController?)
public init(rootView: UIView?,
leftView: UIView?,
rightView: UIView?)
设置
要设置或更改根、左侧或右侧视图控制器或视图,请调用
sideMenuController.rootViewController = rootViewController
sideMenuController.leftViewController = leftViewController
sideMenuController.rightViewController = rightViewController
sideMenuController.rootView = rootView
sideMenuController.leftView = leftView
sideMenuController.rightView = rightView
快速示例
无Storyboard
- 创建根视图控制器(例如 UINavigationController)
- 创建左侧视图控制器(例如 UITableViewController)
- 创建右侧视图控制器(例如泰山视图控制器)
- 使用这些控制器创建 LGSideMenuController 的实例
- 配置
let rootViewController = UINavigationController()
let leftViewController = UITableViewController()
let rightViewController = UITableViewController()
let sideMenuController = LGSideMenuController(rootViewController: rootViewController,
leftViewController: leftViewController,
rightViewController: rightViewController)
sideMenuController.leftViewWidth = 250.0
sideMenuController.leftViewPresentationStyle = .slideAbove
sideMenuController.rightViewWidth = 100.0
sideMenuController.leftViewPresentationStyle = .slideBelow
带 storyboard
- 创建 LGSideMenuController 的实例
- 创建根视图控制器(例如 UINavigationController)
- 创建左侧视图控制器(例如 UITableViewController)
- 创建右侧视图控制器(例如泰山视图控制器)
- 现在您需要使用 LGSideMenuSegue 类中的标识符(root、left、right)将它们全部连接。
- 您可以在 LGSideMenuController 的属性检查器中更改 leftViewWidth、leftViewPresentationStyle、rightViewWidth 及 rightViewPresentationStyle。您还可以在那里找到所有其他属性。
为了获得更好的示例,请查看 示例项目。
模糊效果
您可以使用UIBlurEffect的以下属性:
leftViewBackgroundBlurEffect: UIBlurEffect
rightViewBackgroundBlurEffect: UIBlurEffect
rootViewCoverBlurEffectForLeftView: UIBlurEffect
rootViewCoverBlurEffectForRightView: UIBlurEffect
leftViewCoverBlurEffect: UIBlurEffect
rightViewCoverBlurEffect: UIBlurEffect
例如:
sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular)
如果您想更改模糊视图的颜色,请使用:
leftViewBackgroundColor: UIColor
rightViewBackgroundColor: UIColor
rootViewCoverColorForLeftView: UIColor
rootViewCoverColorForRightView: UIColor
leftViewCoverColor: UIColor
rightViewCoverColor: UIColor
例如:
sideMenuController.leftViewBackgroundColor = UIColor(red: 0.0, green: 0.5, blue: 1.0, alpha: 0.1)
如果您想更改模糊视图的强度,请使用:
leftViewBackgroundAlpha: CGFloat
rightViewBackgroundAlpha: CGFloat
rootViewCoverAlphaForLeftView: CGFloat
rootViewCoverAlphaForRightView: CGFloat
CGFloatleftViewCoverAlpha: CGFloat
rightViewCoverAlpha: CGFloat
例如:
sideMenuController.leftViewBackgroundAlpha = 0.9
状态栏
如果您想为根视图、左侧视图和右侧视图使用不同的状态栏样式,则需要覆盖相应的视图控制器中的 prefersStatusBarHidden
、preferredStatusBarStyle
和 preferredStatusBarUpdateAnimation
属性,或者您可以使用以下属性:
rootViewStatusBarHidden: BOOL
rootViewStatusBarStyle: UIStatusBarStyle
rootViewStatusBarUpdateAnimation: UIStatusBarAnimation
leftViewStatusBarHidden: BOOL
leftViewStatusBarStyle: UIStatusBarStyle
leftViewStatusBarUpdateAnimation: UIStatusBarAnimation
rightViewStatusBarHidden: BOOL
rightViewStatusBarStyle: UIStatusBarStyle
rightViewStatusBarUpdateAnimation: UIStatusBarAnimation
这些属性的优先级高于在控制器内部覆盖的属性:prefersStatusBarHidden, preferredStatusBarStyle, preferredStatusBarUpdateAnimation
。
例如,您有一个侧边菜单控制器,其中包含根视图控制器、左侧视图控制器和右侧视图控制器。对于根视图控制器,您可以覆盖其默认方法或使用侧边菜单控制器的属性。
// In RootViewController.swift
override var prefersStatusBarHidden : Bool {
return false
}
override var preferredStatusBarStyle : UIStatusBarStyle {
return .default
}
override var preferredStatusBarUpdateAnimation : UIStatusBarAnimation {
return .none
}
// OR in SideMenuController.swift
isRootViewStatusBarHidden = false
rootViewStatusBarStyle = .default
rootViewStatusBarUpdateAnimation = .none
// OR in SideMenuController.swift
override var isRootViewStatusBarHidden: Bool {
get { return false }
set { super.isRootViewStatusBarHidden = newValue }
}
override var rootViewStatusBarStyle: UIStatusBarStyle {
get { return .default }
set { super.rootViewStatusBarStyle = newValue }
}
override var rootViewStatusBarUpdateAnimation: UIStatusBarAnimation {
get { return .none }
set { super.rootViewStatusBarUpdateAnimation = newValue }
}
对于左侧视图控制器和右侧视图控制器,方法相同。
始终可见的选项
有时,例如在iPad上,您可能需要在纵向模式下有可切换的侧边菜单,以及在横向模式下总是可见的侧边菜单。
您可以使用以下属性来实现:
leftViewAlwaysVisibleOptions: LGSideMenuController.AlwaysVisibleOptions
rightViewAlwaysVisibleOptions: LGSideMenuController.AlwaysVisibleOptions
您可以像这样选择多个值:
sideMenuController.leftViewAlwaysVisibleOptions = [.padLandscape, .phoneLandscape]
// or
sideMenuController.leftViewAlwaysVisibleOptions = [.landscape]
导航控制器的后退 gesture
对于UINavigationController,后退icone的手势优先级高于对于LGSideMenuController的滑动手势。但如果你想要不同的行为,你可以禁用interactivePopGestureRecognizer
。
navigationController.interactivePopGestureRecognizer.isEnabled = false
ScrollView
如果你有滚动视图,或者sideMenuController内部的任何可交互元素,它们将在你擦过sideMenuController的swipeGestureArea
区域之外时停止工作。如果你需要更大的交互区域,你可以减小leftViewSwipeGestureRange,rightViewSwipeGestureRange
或者禁用它。
sideMenuController.swipeGestureArea = .borders // Default
sideMenuController.leftViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(0.0, 22.0)
sideMenuController.rightViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(22.0, 0.0)
// OR disable gestures completely
sideMenuController.leftViewSwipeGestureEnabled = false
sideMenuController.rightViewSwipeGestureEnabled = false
处理动作
你可以使用委托、闭包或通知来处理动作。
委托
// LGSideMenuDelegate.swift
func willShowLeftView(sideMenuController: LGSideMenuController)
func didShowLeftView(sideMenuController: LGSideMenuController)
func willHideLeftView(sideMenuController: LGSideMenuController)
func didHideLeftView(sideMenuController: LGSideMenuController)
func willShowRightView(sideMenuController: LGSideMenuController)
func didShowRightView(sideMenuController: LGSideMenuController)
func willHideRightView(sideMenuController: LGSideMenuController)
func didHideRightView(sideMenuController: LGSideMenuController)
func showAnimationsForLeftView(sideMenuController: LGSideMenuController, duration: TimeInterval)
func hideAnimationsForLeftView(sideMenuController: LGSideMenuController, duration: TimeInterval)
func showAnimationsForRightView(sideMenuController: LGSideMenuController, duration: TimeInterval)
func hideAnimationsForRightView(sideMenuController: LGSideMenuController, duration: TimeInterval)
闭包
var willShowLeftView: (sideMenuController: LGSideMenuController) -> Void
var didShowLeftView: (sideMenuController: LGSideMenuController) -> Void
var willHideLeftView: (sideMenuController: LGSideMenuController) -> Void
var didHideLeftView: (sideMenuController: LGSideMenuController) -> Void
var willShowRightView: (sideMenuController: LGSideMenuController) -> Void
var didShowRightView: (sideMenuController: LGSideMenuController) -> Void
var willHideRightView: (sideMenuController: LGSideMenuController) -> Void
var didHideRightView: (sideMenuController: LGSideMenuController) -> Void
var showAnimationsForLeftView: (sideMenuController: LGSideMenuController, duration: TimeInterval) -> Void
var hideAnimationsForLeftView: (sideMenuController: LGSideMenuController, duration: TimeInterval) -> Void
var showAnimationsForRightView: (sideMenuController: LGSideMenuController, duration: TimeInterval) -> Void
var hideAnimationsForRightView: (sideMenuController: LGSideMenuController, duration: TimeInterval) -> Void
通知
let LGSideMenuController.Notification.willShowLeftView
let LGSideMenuController.Notification.didShowLeftView
let LGSideMenuController.Notification.willHideLeftView
let LGSideMenuController.Notification.didHideLeftView
let LGSideMenuController.Notification.willShowRightView
let LGSideMenuController.Notification.didShowRightView
let LGSideMenuController.Notification.willHideRightView
let LGSideMenuController.Notification.didHideRightView
let LGSideMenuController.Notification.showAnimationsForLeftView
let LGSideMenuController.Notification.hideAnimationsForLeftView
let LGSideMenuController.Notification.showAnimationsForRightView
let LGSideMenuController.Notification.hideAnimationsForRightView
更多信息
框架
如果您喜欢LGSideMenuController,可以看看我的其他有用库
- LGAlertView 可定制UIAlertViewController、UIAlertView和UIActionSheet的实装。一应俱全。您几乎可以自定义每一个细节。制作出您梦想中的AlertView!:)
- LGPlusButtonsView 可定制的iOS Floating Action Button (Google Plus Button, fab) 实现方案。
许可证
LGSideMenuController按照MIT许可证发布。有关详细信息,请参阅LICENSE。