NPagingMenuController 2.2.1

NPagingMenuController 2.2.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年3月
SwiftSwift 版本3.0
SPM支持 SPM

Nguyen Phu Nghia 维护。



  • 作者:
  • nghiaphunguyen

此库受 PageMenu 的启发

更新

有关详细信息,请参阅 变更日志

描述

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

分段控件模式

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

定制

PagingMenuControllerCustomizable

  • 默认页面索引以显示为第一个视图
defaultPage: Int
  • 分页视图动画的持续时间
animationDuration: TimeInterval
  • 分页视图的 isScrollEnabled。如果在使用您的表格视图上的滑动删除,请将其设置为 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,则选中菜单项始终在中心

如果 MenuScrollingModeScrollEnabledScrollEnabledAndBouces,菜单视图允许滚动以选择任何菜单项,如果 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 文件。