LGI侧滑菜单控制器 3.1.2

LGI侧滑菜单控制器 3.1.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后一次发布2021年8月

Grigory Lutkov维护。



  • 作者:
  • Grigorii Lutkov

LGI侧滑菜单控制器

用于iOS视图控制器的,通过按按钮或手势显示左视图和右视图。

Platform CocoaPods Carthage License

预览

安装

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

含源代码

  1. 下载存储库
  2. LGI侧滑菜单控制器目录 添加到你的项目中
  3. 享受吧!

使用 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

  1. 创建根视图控制器(例如 UINavigationController)
  2. 创建左侧视图控制器(例如 UITableViewController)
  3. 创建右侧视图控制器(例如泰山视图控制器)
  4. 使用这些控制器创建 LGSideMenuController 的实例
  5. 配置
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

  1. 创建 LGSideMenuController 的实例
  2. 创建根视图控制器(例如 UINavigationController)
  3. 创建左侧视图控制器(例如 UITableViewController)
  4. 创建右侧视图控制器(例如泰山视图控制器)
  5. 现在您需要使用 LGSideMenuSegue 类中的标识符(root、left、right)将它们全部连接。

  1. 您可以在 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

状态栏

如果您想为根视图、左侧视图和右侧视图使用不同的状态栏样式,则需要覆盖相应的视图控制器中的 prefersStatusBarHiddenpreferredStatusBarStylepreferredStatusBarUpdateAnimation 属性,或者您可以使用以下属性:

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

更多信息

了解更多细节,请查看自身文件并尝试Xcode中的示例项目

框架

如果您喜欢LGSideMenuController,可以看看我的其他有用库

  • LGAlertView 可定制UIAlertViewController、UIAlertView和UIActionSheet的实装。一应俱全。您几乎可以自定义每一个细节。制作出您梦想中的AlertView!:)
  • LGPlusButtonsView 可定制的iOS Floating Action Button (Google Plus Button, fab) 实现方案。

许可证

LGSideMenuController按照MIT许可证发布。有关详细信息,请参阅LICENSE