|
//
// 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
}
}
}
}
|