123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import UIKit
- public protocol NavigationBarInOut: class {
- var navigationView: UIView { get }
- func navigationBarFadeIn()
- func navigationBarFadeOut()
- }
- extension NavigationBarInOut where Self: UIViewController {
- func navigationBarFadeIn() {
- let animation = UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: nil)
- animation.addAnimations {
- self.navigationView.alpha = 0
- }
-
- animation.addAnimations {
- self.navigationView.frame = CGRect(x: self.navigationView.frame.origin.x + self.calculateOffsetsX(),
- y: self.navigationView.frame.origin.y,
- width: self.navigationView.frame.width,
- height: self.navigationView.frame.height)
- }
- animation.startAnimation()
- }
-
- func navigationBarFadeOut() {
- let animation = UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: nil)
- animation.addAnimations {
- self.navigationView.alpha = 1
- }
-
- animation.addAnimations {
- self.navigationView.frame = CGRect(x: self.navigationView.frame.origin.x - self.calculateOffsetsX(),
- y: self.navigationView.frame.origin.y,
- width: self.navigationView.frame.width,
- height: self.navigationView.frame.height)
- }
- animation.startAnimation()
- }
-
- private func calculateOffsetsX() -> CGFloat {
- guard let barButtonItems = navigationItem.rightBarButtonItems else { return 0 }
-
- return barButtonItems.reduce(0) { (res, item) -> CGFloat in
- if let view = item.customView {
- return res + view.bounds.width
- } else {
- return res
- }
- }
- }
- }
|