SwiftyPageController 0.1.2

SwiftyPageController 0.1.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017 年 12 月
SwiftSwift 版本4.0
SPM支持 SPM

[Alexandr] 维护。



  • 作者
  • alkhokhlov

SwiftyPageController

CI Status
Version
License
Platform

描述

SwiftyPageController 将有助于在许多页面控制器中使用。

优点

  • 可定制的 动画过渡;
  • 可定制的 选择按钮(您可以通过自己的方式实现它们)

如何使用

  • 从 storyboard 或通过程序添加 Contanier View

  • 选择容器控制器的类为 SwiftyPageController

  • 按照以下示例设置
class ViewController: UIViewController {

    @IBOutlet weak var segmentControl: UISegmentedControl!
    
    var containerController: SwiftyPageController!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        segmentControl.addTarget(self, action: #selector(segmentControlDidChange(_:)), for: .valueChanged)
    }
    
    func segmentControlDidChange(_ sender: UISegmentedControl) {
        // select needed controller
        containerController.selectController(atIndex: sender.selectedSegmentIndex, animated: true)
    }
    
    func setupContainerController(_ controller: SwiftyPageController) {
        // assign variable
        containerController = controller
        
        // set delegate
        containerController.delegate = self
        
        // set animation type
        containerController.animator = .parallax
        
        // set view controllers
        let firstController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "\(FirstViewController.self)")
        let secondController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "\(SecondViewController.self)")
        let thirdController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "\(ThirdViewController.self)")
        containerController.viewControllers = [firstController, secondController, thirdController]
        
        // select needed controller
        containerController.selectController(atIndex: 0, animated: false)
    }
    
    // MARK: - Navigation

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let containerController = segue.destination as? SwiftyPageController {
            setupContainerController(containerController)
        }
    }

}
  • 在添加容器控制器的地方实现 SwiftyPageControllerDelegate
func swiftyPageController(_ controller: SwiftyPageController, alongSideTransitionToController toController: UIViewController) {
        
    }
    
    func swiftyPageController(_ controller: SwiftyPageController, didMoveToController toController: UIViewController) {
        segmentControl.selectedSegmentIndex = containerController.viewControllers.index(of: toController)!
    }
    
    func swiftyPageController(_ controller: SwiftyPageController, willMoveToController toController: UIViewController) {
        
    }
  • 为选择所需的标签使用方法
 func selectController(atIndex index: Int, animated: Bool)

动画

为了选择动画,请使用属性

public var animator: AnimatorType

您可以使用三种类型的动画

  • 默认
  • 视差
  • 自定义

如果您想创建自己的动画,则需要实现 SwiftyPageControllerAnimatorProtocol

public protocol SwiftyPageControllerAnimatorProtocol {
    
    var animationDuration: TimeInterval { get }
    
    var animationProgress: Float { get set }
    
    var animationSpeed: Float { get set }
    
    func setupAnimation(fromController: UIViewController, toController: UIViewController, panGesture: UIPanGestureRecognizer, animationDirection: SwiftyPageController.AnimationDirection)
    
    func didFinishAnimation(fromController: UIViewController, toController: UIViewController)
    
}

并且可以使用如下方式使用它

containerController.animator = .custom(CustomAnimationController())

示例

为了运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install

要求

安装

SwiftyPageController 通过 CocoaPods 提供。要安装
它,只需在 Podfile 中添加以下行

pod "SwiftyPageController"

作者

alkhokhlov, [email protected]

许可证

SwiftyPageController 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。