InteractiveSideMenu 2.3

InteractiveSideMenu 2.3

测试已测试
语言语言 SwiftSwift
许可 Apache 2
发布最后一次发布2018年2月
SwiftSwift版本3.0
SPM支持SPM

Andrey ArzhannikovOlga KonorevaEric Miller维护。



  • 作者:
  • Eric Miller

交互式侧边菜单



Swift编写的iOS交互式侧边菜单。

sample

它支持以下自定义

  • 动画持续时间
  • 可见内容宽度
  • 内容缩放
  • 使用带参数自定义的弹簧动画
  • 如动画曲线等动画选项

所有这些参数都可以根据不同的方向进行变化。

通讯

  • 如果您需要帮助或发现了错误,请打开一个问题。
  • 如果您有功能请求,请打开一个问题。
  • 如果您准备贡献力量,请提交拉取请求。
  • 如果您喜欢Interactive Side Menu,请给它一个星。
  • 如果您已经在AppStore上发布了使用Interactive Side Menu的应用程序,请发送给我们链接,我们将创建一个使用我们库的应用程序列表。

更多详细信息请参阅CONTRIBUTING文件。

安装

使用

要实现您的侧边菜单,您应该创建基本视图控制器的基本子类。

  • MenuContainerViewController是菜单和内容视图的主机
  • MenuViewController是菜单视图的容器

同时,确保每个菜单项视图控制器都采用相应的协议。

  • SideMenuItemContent是对应菜单项的数据视图控制器协议

宿主控制器实现

要设置您的侧边菜单,您需要做三件事

  • 提供MenuViewController的基本实现并将它分配给menuViewController属性
  • 提供菜单内容并将内容控制器的数组分配给contentViewControllers属性
  • 通过调用selectContentViewController(_ selectedContentVC: MenuItemContentViewController)选择初始内容控制器
import InteractiveSideMenu

class HostViewController: MenuContainerViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        menuViewController = self.storyboard!.instantiateViewController(withIdentifier: "NavigationMenu") as! MenuViewController
    contentViewControllers = contentControllers()
        selectContentViewController(contentViewControllers.first!)
    }

    private func contentControllers() -> [MenuItemContentViewController] {
        var contentList = [MenuItemContentViewController]()
        contentList.append(self.storyboard?.instantiateViewController(withIdentifier: "First") as! MenuItemContentViewController)
        contentList.append(self.storyboard?.instantiateViewController(withIdentifier: "Second") as! MenuItemContentViewController)
        return contentList
    }
}

菜单项内容

要显示菜单,从SideMenuItemContent协议中调用showSideMenu()方法。

import InteractiveSideMenu

class KittyViewController: UIViewController, SideMenuItemContent {
    
    @IBAction func openMenu(_ sender: UIButton) {
        showSideMenu()
    }
}

要更改内容视图,选择所需的内容控制器并隐藏菜单。

    let index = 2 // Second menu item
    guard let menuContainerViewController = self.menuContainerViewController else { return }
    let contentController = menuContainerViewController.contentViewControllers[index]
    menuContainerViewController.selectContentViewController(contentController)
    menuContainerViewController.hideSideMenu()

标签栏和导航控制器

要使用标签栏或导航控制器使用菜单,确保你将UITabBarController或UINavigationController直接标识为项内容,而不是任何相应的视图控制器。

class NavigationViewController: UINavigationController, SideMenuItemContent {
}

class InnerViewController: UIViewController {

    @IBAction func openMenu(_ sender: Any) {
        if let navigationViewController = self.navigationController as? SideMenuItemContent {
            navigationViewController.showSideMenu()
        }
    }
}

请参阅Sample中的UITabBarController实现细节。

动画自定义

要自定义菜单打开或关闭的动画,更新transitionOptions属性,该属性在MenuContainerViewColtroller类中可用。初始设置可以在控制器的viewDidLoad()中完成。

override func viewDidLoad() {
   super.viewDidLoad()
   let screenSize: CGRect = UIScreen.main.bounds
   self.transitionOptions = TransitionOptions(duration: 0.4, visibleContentWidth: screenSize.width / 6)
   ...
}

此外,您还可以更新自定义设置,例如设置横屏幕方向的其他选项。为此,请重写viewWillTransition(to:with:)方法,并将所需参数添加到transitionOptions属性。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    var options = TransitionOptions()
    options.duration = size.width < size.height ? 0.4 : 0.6
    options.visibleContentWidth = size.width / 6
    self.transitionOptions = options
}

过渡选项还可以用于设置紧凑和常规尺寸的不同参数。实现ViewController的traitCollectionDidChange(_: )方法以添加这些设置。

请参考示例以了解实现细节,并查看变更日志了解如何从v1.0更新到v2.0的更多信息。

已知问题

存在一个与iOS 11中NavigationBar缩放相关的问题。问题在于当contentScale < 1时,关闭侧菜单期间状态栏背景被隐藏。这被认为是iOS 11 NavigationBar的问题,已报告给Apple。

要求

  • iOS 8.0+
  • Xcode 8.1+
  • Swift 3.0+

许可

InteractiveSideMenu遵循Apache License,Version 2.0。有关更多信息,请参阅许可证文件。