No Description

NavigationBarInteractivePopDeletegate.swift 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // NavigationBarInteractivePopDeletegate.swift
  3. // PaiaiUIKit
  4. //
  5. // Created by ffib on 2019/1/15.
  6. // Copyright © 2019 yb. All rights reserved.
  7. //
  8. import Foundation
  9. public protocol NavigationBarInteractivePopDeletegate: class {
  10. func setupNavigationBarInteractivePopDelegate()
  11. }
  12. public extension NavigationBarInteractivePopDeletegate where Self: UIViewController & NavigationBarInOut {
  13. func setupNavigationBarInteractivePopDelegate() {
  14. guard let nav = navigationController else { return }
  15. nav.interactivePopGestureRecognizer?.addTarget(self, action: #selector(interactivePopAnimation(gesture:)))
  16. }
  17. }
  18. extension UIViewController {
  19. @objc func interactivePopAnimation(gesture: UIPanGestureRecognizer) {
  20. let point = gesture.translation(in: view)
  21. let percentage = calculatePercentageOfOffsets(point: point)
  22. (self as? NavigationBarInOut)?.navigationBarFadeOutWithPercentage(percentage)
  23. switch gesture.state {
  24. case .ended:
  25. if percentage > 0.5 {
  26. (self as? NavigationBarInOut)?.navigationBarFadeOut()
  27. } else {
  28. (self as? NavigationBarInOut)?.navigationBarFadeIn()
  29. }
  30. default:
  31. return
  32. }
  33. }
  34. func calculatePercentageOfOffsets(point: CGPoint) -> CGFloat {
  35. return point.x / view.bounds.width
  36. }
  37. }