测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Michael Skiba,Raiz Labs,Alex Rouse,Rightpoint CI 维护。
使用交互式滑动手势导航视图栈
登机牌是 UINavigationController
的子类,带有交互式的推送和弹出手势。它提供的行为类似于 UIPageViewController
,但具有导航控制器所有熟悉的行为,以及轻松动画属性变化并伴随转场的能力。
BoardingPass/
目录下的所有 .swift
文件并将其拖入您的项目中。要查看使用画廊的完整示例,请查看 示例项目。
在最简单的形式中,可以通过初始化一个视图控制器数组来初始化 BoardingNavigationController
,这将允许用户通过滑动来在导航栈中前后滑动。
func beginOnboarding() {
let viewControllers = [
FirstViewController(),
SecondViewController(),
ThirdViewController(),
]
let onboarding = BoardingNavigationController(viewControllersToPresent: viewControllers)
present(onboarding, animated: true, completion: nil)
}
为了更精细地控制导航,例如现在允许用户在查看完整的登机栈之后向后翻页,视图控制器可以遵守 BoardingInformation
协议并为 nextViewController
或 previousViewController
设置一个值。
extension ThirdViewController: BoardingInformation {
var nextViewController: UIViewController? {
let completed = CompletedViewController()
return completed
}
}
通过将视图控制器返回到要显示的视图控制器系列之外,一旦用户前进到CompletedViewController
,BoardingNavigationController
将禁用滑动手势。
为了使登录堆栈的外观和感觉更加定制,BoadingPass
被设计成可以轻松添加与推入和弹出展示同时运行的动画。为了在导航动画中添加进度滑块和背景颜色。
第一步是定义一个协议,供每个将要显示的视图控制器遵循,以及一个子类BoardingInformation
将遵循的委托协议,以允许视图控制器向上与其容器通信。
protocol BackgroundColorProvider: class {
weak var onboardingDelegate: OnboardingViewControllerDelegate? { get set }
var backgroundColor: UIColor { get }
var currentProgress: Progress { get }
}
protocol OnboardingViewControllerDelegate: class {
var backgroundColor: UIColor? { get set }
var progress: Progress { get set }
}
然后可以扩展BackgroundColorProvider
以创建一个共享函数来生成闭包,用于动画背景颜色和进度指示器。
extension BackgroundColorProvider {
var animation: (() -> Void) {
return { [unowned self] in
self.onboardingDelegate?.backgroundColor = self.backgroundColor
self.onboardingDelegate?.progress = self.currentProgress
}
}
}
然后每个实现BackgroundColorProvider
的类需要在viewWillAppear
方法中添加一个方法,以在当前上下文中执行协调动画,如果没有上下文,则执行动画作为后备。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let factory: AnimationFactory = { [unowned self] (_, _) in
return self.animation
}
perform(coordinatedAnimations: factory)
}
问题和拉取请求都欢迎!请在提交之前确保安装了最新的SwiftLint,并且在构建时没有生成样式警告。
贡献者应遵守贡献者公约行为准则。
BoardingPass在MIT许可下可用。有关更多信息,请参阅LICENSE文件。
Michael Skiba,[email protected] @atelierclkwrk