No Description

NavigationBar.swift 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // NavigationBar.swift
  3. // PaiaiUIKit
  4. //
  5. // Created by ffib on 2019/1/15.
  6. // Copyright © 2019 yb. All rights reserved.
  7. //
  8. import UIKit
  9. public protocol NavigationBarInOut: class {
  10. var navigationView: UIView { get }
  11. func navigationBarFadeIn()
  12. func navigationBarFadeOut()
  13. }
  14. extension NavigationBarInOut where Self: UIViewController {
  15. func navigationBarFadeIn() {
  16. let animation = UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: nil)
  17. animation.addAnimations {
  18. self.navigationView.alpha = 0
  19. }
  20. animation.addAnimations {
  21. self.navigationView.frame = CGRect(x: self.navigationView.frame.origin.x + self.calculateOffsetsX(),
  22. y: self.navigationView.frame.origin.y,
  23. width: self.navigationView.frame.width,
  24. height: self.navigationView.frame.height)
  25. }
  26. animation.startAnimation()
  27. }
  28. func navigationBarFadeOut() {
  29. let animation = UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: nil)
  30. animation.addAnimations {
  31. self.navigationView.alpha = 1
  32. }
  33. animation.addAnimations {
  34. self.navigationView.frame = CGRect(x: self.navigationView.frame.origin.x - self.calculateOffsetsX(),
  35. y: self.navigationView.frame.origin.y,
  36. width: self.navigationView.frame.width,
  37. height: self.navigationView.frame.height)
  38. }
  39. animation.startAnimation()
  40. }
  41. private func calculateOffsetsX() -> CGFloat {
  42. guard let barButtonItems = navigationItem.rightBarButtonItems else { return 0 }
  43. return barButtonItems.reduce(0) { (res, item) -> CGFloat in
  44. if let view = item.customView {
  45. return res + view.bounds.width
  46. } else {
  47. return res
  48. }
  49. }
  50. }
  51. }