PagingMenuController 2.2.0

PagingMenuController 2.2.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2017年1月
SwiftSwift 版本3.0
SPM支持 SPM

kitasuke维护。



  • kitasuke

此库受 PageMenu 启发。

更新

查看 CHANGELOG 获取详细信息。

描述

具有灵活项目宽度的标准模式

分段控制模式

具有固定项目宽度的无限模式

自定义

PagingMenuControllerCustomizable

  • 默认页面索引显示为第一个视图
defaultPage: Int
  • 分页视图动画的持续时间
animationDuration: TimeInterval
  • 分页视图的 isScrollEnabled。 在使用 swipe-to-delete 时将此设置为 false
isScrollEnabled: Bool
  • 分页视图的背景颜色
backgroundColor: UIColor
  • 懒惰加载页面的数量
lazyLoadingPage: LazyLoadingPage
public enum LazyLoadingPage {
    case one // Currently sets false to isScrollEnabled at this moment. Should be fixed in the future.
    case three
    case all // Currently not available for Infinite mode
}
  • 一系列的菜单控制器
menuControllerSet: MenuControllerSet
public enum MenuControllerSet {
        case single
        case multiple
    }
  • PagingMenuController 的组件类型
componentType: ComponentType
public enum ComponentType {
    case menuView(menuOptions: MenuViewCustomizable)
    case pagingController(pagingControllers: [UIViewController])
    case all(menuOptions: MenuViewCustomizable, pagingControllers: [UIViewController])
}

MenuViewCustomizable

  • 菜单视图的背景颜色
backgroundColor: UIColor
  • 选中菜单项的背景颜色
selectedBackgroundColor: UIColor
  • 菜单视图的高度
height: CGFloat
  • 菜单视图动画的持续时间
animationDuration: TimeInterval
  • 菜单视图的减速率
deceleratingRate: CGFloat
  • 菜单项的位置
menuSelectedItemCenter: Bool
  • 菜单模式及滚动模式
displayMode: MenuDisplayMode

public enum MenuDisplayMode {
    case standard(widthMode: MenuItemWidthMode, centerItem: Bool, scrollingMode: MenuScrollingMode)
    case segmentedControl
    case infinite(widthMode: MenuItemWidthMode, scrollingMode: MenuScrollingMode) // Requires three paging views at least
}

public enum MenuItemWidthMode {
    case flexible
    case fixed(width: CGFloat)
}

public enum MenuScrollingMode {
  case scrollEnabled
  case scrollEnabledAndBouces
  case pagingEnabled
}

如果 centerItem 为 true,则选中菜单项始终位于中心

如果 MenuScrollingModeScrollEnabledScrollEnabledAndBounces,则如果 MenuScrollingModePagingEnabled,菜单查看器允许滚动以选择任何菜单项,则菜单项应逐个选中

  • 菜单项焦点模式
focusMode: MenuFocusMode
public enum MenuFocusMode {
    case none
    case underline(height: CGFloat, color: UIColor, horizontalPadding: CGFloat, verticalPadding: CGFloat)
    case roundRect(radius: CGFloat, horizontalPadding: CGFloat, verticalPadding: CGFloat, selectedColor: UIColor)
}
  • 无限模式中的虚拟项目视图数量
dummyItemViewsSet: Int
  • 菜单位置
menuPosition: MenuPosition

public enum MenuPosition {
    case top
    case bottom
}
  • 显示在每个菜单项中右对齐的分隔图像
dividerImage: UIImage?

MenuItemViewCustomizable

  • 菜单项的水平边距
horizontalMargin: CGFloat
  • 菜单项模式
displayMode: MenuItemDisplayMode
public enum MenuItemDisplayMode {
    case text(title: MenuItemText)
    case multilineText(title: MenuItemText, description: MenuItemText)
    case image(image: UIImage, selectedImage: UIImage?)
    case custom(view: UIView)
}

用法

在文件中导入PagingMenuController以使用PagingMenuController。

使用Storyboard

struct MenuItem1: MenuItemViewCustomizable {}
struct MenuItem2: MenuItemViewCustomizable {}

struct MenuOptions: MenuViewCustomizable {
    var itemsOptions: [MenuItemViewCustomizable] {
        return [MenuItem1(), MenuItem2()]
    }
}

struct PagingMenuOptions: PagingMenuControllerCustomizable {
    var componentType: ComponentType {
        return .all(menuOptions: MenuOptions(), pagingControllers: [UIViewController(), UIViewController()])
    }
}

let pagingMenuController = self.childViewControllers.first as! PagingMenuController
pagingMenuController.setup(options)
pagingMenuController.onMove = { state in
    switch state {
    case let .willMoveController(menuController, previousMenuController):
        print(previousMenuController)
        print(menuController)
    case let .didMoveController(menuController, previousMenuController):
        print(previousMenuController)
        print(menuController)
    case let .willMoveItem(menuItemView, previousMenuItemView):
        print(previousMenuItemView)
        print(menuItemView)
    case let .didMoveItem(menuItemView, previousMenuItemView):
        print(previousMenuItemView)
        print(menuItemView)
    case .didScrollStart:
        print("Scroll start")
    case .didScrollEnd:
        print("Scroll end")
    }
}
  • 应将ContainerView添加到您的视图控制器的视图中,并设置PagingMenuController为嵌入式视图控制器的类

请参阅演示项目中PagingMenuControllerDemo目标以获取更多详细信息

仅编码

struct MenuItem1: MenuItemViewCustomizable {}
struct MenuItem2: MenuItemViewCustomizable {}

struct MenuOptions: MenuViewCustomizable {
    var itemsOptions: [MenuItemViewCustomizable] {
        return [MenuItem1(), MenuItem2()]
    }
}

struct PagingMenuOptions: PagingMenuControllerCustomizable {
    var componentType: ComponentType {
        return .all(menuOptions: MenuOptions(), pagingControllers: [UIViewController(), UIViewController()])
    }
}

let options = PagingMenuOptions()
let pagingMenuController = PagingMenuController(options: options)

addChildViewController(pagingMenuController)
view.addSubview(pagingMenuController.view)
pagingMenuController.didMove(toParentViewController: self)

请参阅演示项目中PagingMenuControllerDemo2目标以获取更多详细信息

菜单移动处理程序(可选)

public enum MenuMoveState {
    case willMoveController(to: UIViewController, from: UIViewController)
    case didMoveController(to: UIViewController, from: UIViewController)
    case willMoveItem(to: MenuItemView, from: MenuItemView)
    case didMoveItem(to: MenuItemView, from: MenuItemView)
    case didScrollStart
    case didScrollEnd
}

pagingMenuController.onMove = { state in
    switch state {
    case let .willMoveController(menuController, previousMenuController):
        print(previousMenuController)
        print(menuController)
    case let .didMoveController(menuController, previousMenuController):
        print(previousMenuController)
        print(menuController)
    case let .willMoveItem(menuItemView, previousMenuItemView):
        print(previousMenuItemView)
        print(menuItemView)
    case let .didMoveItem(menuItemView, previousMenuItemView):
        print(previousMenuItemView)
        print(menuItemView)
    case .didScrollStart:
        print("Scroll start")
    case .didScrollEnd:
        print("Scroll end")
    }
}

通过编程方式移动到菜单标记

// if you pass a nonexistent page number, it'll be ignored
pagingMenuController.move(toPage: 1, animated: true)

更改PagingMenuController的选项

再次调用带有新选项的setup方法。它创建了一个新的分页菜单控制器。请务必清理子视图控制器中的属性。

要求

iOS9+
Swift 3.0+
Xcode 8.0+

v1.4.0 用于 Swift 3.0 中的 iOS 8
v1.2.0 用于 Swift 2.3 中的 iOS 8

安装

手动

Pod/Classes目录中的所有文件复制到您的项目中。

许可

PagingMenuController 在 MIT 许可下提供。有关更多信息,请参阅LICENSE文件。