Pageboy 4.2.0

Pageboy 4.2.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布Apr 2024
SPM支持SPM

Merrick SapsfordUI At Six维护。



Pageboy 4.2.0

Pageboy

TL;DR 正确处理UIPageViewController。

⭐️功能

  • 简化数据源管理并增强代理。
  • 动态插入和删除页面。
  • 无限滚动支持。
  • 基于定时器的自动页面过渡。
  • 支持自定义动画页面过渡。

📋要求

Pageboy需要iOS 11/tvOS 11,且与Swift 5兼容。

📲安装

Swift Package Manager

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

CocoaPods

Pageboy也可通过CocoaPods获得。

pod 'Pageboy', '~> 4.0'

Carthage

Pageboy也可通过Carthage获得。

github "uias/Pageboy" ~> 4.0

🚀使用方法

基础知识

  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 提供的更可靠、更有用。您可以使用它们来确切地找到当前页面的位置,并且当它移动时,知道它将去往何方。

即将开始过渡到新页面的过程。

过渡到新页面。

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

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

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

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

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

成功的滚动过渡到了新页面。

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)
  • 使用 .isInfiniteScrollEnabled 可以启用无限滚动。
  • 交互式滚动也可以通过 .isScrollEnabled 控制。

插入与删除

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 值来配置。

⚡️其他附加功能

  • reloadData() - 重新加载页面视图控制器中的视图控制器(重新加载数据源)。
  • .navigationOrientation - 是否水平或垂直定位页面。
  • .currentViewController - 如果存在,当前显示的视图控制器。
  • .currentPosition - 页面视图控制器的确切相对位置。
  • .currentIndex - 当前可见页面的索引。
  • .parentPageboy - 从任何子视图控制器访问直接父 PageboyViewController

动画转换

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 许可证 的条款下作为开源提供。