登机牌 0.2.1

登机牌 0.2.1

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

Michael SkibaRaiz LabsAlex RouseRightpoint CI 维护。



登机牌 0.2.1

登机牌

使用交互式滑动手势导航视图栈

登机牌是 UINavigationController 的子类,带有交互式的推送和弹出手势。它提供的行为类似于 UIPageViewController,但具有导航控制器所有熟悉的行为,以及轻松动画属性变化并伴随转场的能力。

BoardingPass

功能

  • [x] 交互式滑动和拖动转场
  • [x] 导航控制器推送和弹出使用滑动动画
  • [x] 可支持在转场期间动画其他属性
  • [x] 可精确控制何时激活推送和弹出手势。

要求

  • iOS 9.0+
  • Xcode 8.0+

手动

  1. 下载 BoardingPass/ 目录下的所有 .swift 文件并将其拖入您的项目中。
  2. 恭喜!

使用示例

要查看使用画廊的完整示例,请查看 示例项目

简单登机

在最简单的形式中,可以通过初始化一个视图控制器数组来初始化 BoardingNavigationController,这将允许用户通过滑动来在导航栈中前后滑动。

func beginOnboarding() {
    let viewControllers = [
        FirstViewController(),
        SecondViewController(),
        ThirdViewController(),
        ]
    let onboarding = BoardingNavigationController(viewControllersToPresent: viewControllers)
    present(onboarding, animated: true, completion: nil)
}

控制导航

为了更精细地控制导航,例如现在允许用户在查看完整的登机栈之后向后翻页,视图控制器可以遵守 BoardingInformation 协议并为 nextViewControllerpreviousViewController 设置一个值。

extension ThirdViewController: BoardingInformation {

    var nextViewController: UIViewController? {
        let completed = CompletedViewController()
        return completed
    }

}

通过将视图控制器返回到要显示的视图控制器系列之外,一旦用户前进到CompletedViewControllerBoardingNavigationController将禁用滑动手势。

超越预期

为了使登录堆栈的外观和感觉更加定制,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