Pageboy

TL;DR 正确使用 UIPageViewController。

⭐️ 功能特点

📋 系统要求

Pageboy 需要 iOS 12 / tvOS 12;并兼容 Swift 5。

📲 安装

Swift Package Manager

Pageboy 兼容 Swift Package Manager,可以通过 Xcode 集成。

CocoaPods

Pageboy 也可通过 CocoaPods 获取

pod 'Pageboy', '~> 4.2'

Carthage

Pageboy 也可通过 Carthage 获取

github "uias/Pageboy" ~> 4.2

🚀 使用方法

基础用法

  1. 创建一个 PageboyViewController 的实例,并为其提供一个 PageboyViewControllerDataSource
class PageViewController: PageboyViewController, PageboyViewControllerDataSource {

    override func viewDidLoad() {
        super.viewDidLoad()
        
	self.dataSource = self
    }
}
  1. 实现 PageboyViewControllerDataSource 函数。
func numberOfViewControllers(in pageboyViewController: PageboyViewController) -> Int {
    return viewControllers.count
}

func viewController(for pageboyViewController: PageboyViewController,
                    at index: PageboyViewController.PageIndex) -> UIViewController? {
    return viewControllers[index]
}

func defaultPage(for pageboyViewController: PageboyViewController) -> PageboyViewController.Page? {
    return nil
}

PageboyViewControllerDelegate

PageboyViewController 提供的委托函数比原始 UIPageViewController 提供的更可靠和更有用。您可以使用它们来准确了解当前页面在哪里,以及页面移动时,它将前往哪里。

willScrollToPageAtIndex

即将开始过渡到新页面。

func pageboyViewController(_ pageboyViewController: PageboyViewController,
                           willScrollToPageAt index: Int,
                           direction: PageboyViewController.NavigationDirection,
                           animated: Bool)

didScrollToPosition

在过渡到新页面的过程中,滚动到相对位置。

func pageboyViewController(_ pageboyViewController: PageboyViewController,
                           didScrollTo position: CGPoint,
                           direction: PageboyViewController.NavigationDirection,
                           animated: Bool)

didScrollToPage

成功完成滚动过渡到页面。

func pageboyViewController(_ pageboyViewController: PageboyViewController,
                           didScrollToPageAt index: Int,
                           direction: PageboyViewController.NavigationDirection,
                           animated: Bool)

didReload

子视图控制器已重新加载。

func pageboyViewController(_ pageboyViewController: PageboyViewController,
                           didReloadWith currentViewController: UIViewController,
                           currentPageIndex: PageIndex)

导航

您可以使用 scrollToPage() 以编程方式在 PageboyViewController 中导航

pageViewController.scrollToPage(.next, animated: true)

插入 & 删除

Pageboy 提供了在 PageboyViewController 中动态插入和删除页面的功能。

func insertPage(at index: PageIndex, then updateBehavior: PageUpdateBehavior)
func deletePage(at index: PageIndex, then updateBehavior: PageUpdateBehavior)

这与 UITableView 中插入行的行为类似,事实上,您必须在调用任何更新函数之前更新数据源。

示例

let index = 2
viewControllers.insert(UIViewController(), at: index)
pageViewController.insertPage(at: index)

插入或删除页面后的默认行为是滚动到更新位置,但是,可以通过传递除 .scrollToUpdate 之外的 PageUpdateBehavior 值来配置此行为。

⚡️ 其他特性

动画过渡

Pageboy 还为动画过渡提供自定义过渡支持。可以通过 PageboyViewController 上的 .transition 属性进行自定义。

pageboyViewController.transition = Transition(style: .push, duration: 1.0)

注意:默认情况下,此项设置为 nil,它使用 UIPageViewController 提供的标准动画。

自动滚动

PageboyAutoScroller 可用于设置基于定时器的 PageboyViewController 自动滚动

pageboyViewController.autoScroller.enable()

还支持自定义间隔持续时间和其他滚动行为。

👨🏻‍💻 关于

❤️ 贡献

欢迎在 GitHub 上提交错误报告和拉取请求:https://github.com/uias/Pageboy

👮🏻‍♂️ 许可协议

该库以 MIT 许可证 的条款开源发布。