Nav apraksta

NavigationBar.swift 2.1KB

    // // NavigationBar.swift // PaiaiUIKit // // Created by ffib on 2019/1/15. // Copyright © 2019 yb. All rights reserved. // 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 } } } }