Skip to content

Commit 46e4fa3

Browse files
committed
update classes
1 parent b5930a0 commit 46e4fa3

File tree

1 file changed

+65
-75
lines changed

1 file changed

+65
-75
lines changed

WRNavigationBar/WRNavigationBar.swift

Lines changed: 65 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// Created by wangrui on 2017/4/19.
66
// Copyright © 2017年 wangrui. All rights reserved.
77
//
8+
// Github地址:https://github.com/wangrui460/WRNavigationBar_swift
89

910
import UIKit
1011

@@ -31,41 +32,19 @@ extension UINavigationBar
3132
{
3233
if (backgroundView == nil)
3334
{
34-
// 设置导航栏本身全透明
35+
// add a image(nil color) to _UIBarBackground make it clear
3536
setBackgroundImage(UIImage(), for: .default)
3637
backgroundView = UIView(frame: CGRect(x: 0, y: 0, width: Int(bounds.width), height: 64))
37-
// _UIBarBackground是导航栏的第一个子控件
38+
// _UIBarBackground is first subView for navigationBar
3839
subviews.first?.insertSubview(backgroundView ?? UIView(), at: 0)
3940
}
4041
backgroundView?.backgroundColor = color
4142
}
4243

43-
// set navigationBar effectView alpha 设置导航栏毛玻璃的透明度
44+
// set _UIBarBackground alpha (_UIBarBackground subviews alpha <= _UIBarBackground alpha)
4445
fileprivate func wr_setBackgroundAlpha(alpha:CGFloat)
4546
{
4647
let barBackgroundView = subviews[0]
47-
let valueForKey = barBackgroundView.value(forKey:)
48-
49-
if let shadowView = valueForKey("_shadowView") as? UIView {
50-
shadowView.alpha = alpha
51-
}
52-
53-
if isTranslucent {
54-
if #available(iOS 10.0, *) {
55-
if let backgroundEffectView = valueForKey("_backgroundEffectView") as? UIView, backgroundImage(for: .default) == nil {
56-
backgroundEffectView.alpha = alpha
57-
return
58-
}
59-
60-
} else {
61-
if let adaptiveBackdrop = valueForKey("_adaptiveBackdrop") as? UIView ,
62-
let backdropEffectView = adaptiveBackdrop.value(forKey: "_backdropEffectView") as? UIView {
63-
backdropEffectView.alpha = alpha
64-
return
65-
}
66-
}
67-
}
68-
6948
barBackgroundView.alpha = alpha
7049
}
7150

@@ -76,10 +55,17 @@ extension UINavigationBar
7655
{
7756
if (hasSystemBackIndicator == true)
7857
{
79-
// _UIBarBackground对应的view是系统导航栏,不需要改变其透明度
58+
// _UIBarBackground/_UINavigationBarBackground对应的view是系统导航栏,不需要改变其透明度
8059
if let _UIBarBackgroundClass = NSClassFromString("_UIBarBackground")
8160
{
82-
if (view.isKind(of: _UIBarBackgroundClass) == false) {
61+
if view.isKind(of: _UIBarBackgroundClass) == false {
62+
view.alpha = alpha
63+
}
64+
}
65+
66+
if let _UINavigationBarBackground = NSClassFromString("_UINavigationBarBackground")
67+
{
68+
if view.isKind(of: _UINavigationBarBackground) == false {
8369
view.alpha = alpha
8470
}
8571
}
@@ -88,10 +74,20 @@ extension UINavigationBar
8874
{
8975
// 这里如果不做判断的话,会显示 backIndicatorImage(系统返回按钮)
9076
if let _UINavigationBarBackIndicatorViewClass = NSClassFromString("_UINavigationBarBackIndicatorView"),
91-
let _UIBarBackgroundClass = NSClassFromString("_UIBarBackground")
77+
view.isKind(of: _UINavigationBarBackIndicatorViewClass) == false
9278
{
93-
if (view.isKind(of: _UINavigationBarBackIndicatorViewClass) == false && view.isKind(of: _UIBarBackgroundClass) == false) {
94-
view.alpha = alpha
79+
if let _UIBarBackgroundClass = NSClassFromString("_UIBarBackground")
80+
{
81+
if view.isKind(of: _UIBarBackgroundClass) == false {
82+
view.alpha = alpha
83+
}
84+
}
85+
86+
if let _UINavigationBarBackground = NSClassFromString("_UINavigationBarBackground")
87+
{
88+
if view.isKind(of: _UINavigationBarBackground) == false {
89+
view.alpha = alpha
90+
}
9591
}
9692
}
9793
}
@@ -103,15 +99,6 @@ extension UINavigationBar
10399
{
104100
transform = CGAffineTransform.init(translationX: 0, y: translationY)
105101
}
106-
107-
/// 清除在导航栏上设置的背景颜色、透明度、位移距离等属性
108-
func wr_clear()
109-
{
110-
// 设置导航栏不透明
111-
setBackgroundImage(nil, for: .default)
112-
backgroundView?.removeFromSuperview()
113-
backgroundView = nil
114-
}
115102
}
116103

117104
//==========================================================================
@@ -128,9 +115,9 @@ extension UINavigationController
128115
navigationBar.wr_setBackgroundColor(color: barTintColor)
129116
}
130117

131-
fileprivate func setNeedsNavigationBarUpdate(effectAlpha: CGFloat)
118+
fileprivate func setNeedsNavigationBarUpdate(barBackgroundAlpha: CGFloat)
132119
{
133-
navigationBar.wr_setBackgroundAlpha(alpha: effectAlpha)
120+
navigationBar.wr_setBackgroundAlpha(alpha: barBackgroundAlpha)
134121
}
135122

136123
fileprivate func setNeedsNavigationBarUpdate(tintColor: UIColor) {
@@ -235,11 +222,11 @@ extension UINavigationController
235222
let newTintColor = UIColor.middleColor(fromColor: fromTintColor, toColor: toTintColor, percent: popProgress)
236223
setNeedsNavigationBarUpdate(tintColor: newTintColor)
237224

238-
// change navBar effectView alpha
239-
let fromEffectAlpha = fromVC?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
240-
let toEffectAlpha = toVC?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
241-
let newEffectAlpha = UIColor.middleAlpha(fromAlpha: fromEffectAlpha, toAlpha: toEffectAlpha, percent: popProgress)
242-
setNeedsNavigationBarUpdate(effectAlpha: newEffectAlpha)
225+
// change navBar _UIBarBackground alpha
226+
let fromBarBackgroundAlpha = fromVC?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
227+
let toBarBackgroundAlpha = toVC?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
228+
let newBarBackgroundAlpha = UIColor.middleAlpha(fromAlpha: fromBarBackgroundAlpha, toAlpha: toBarBackgroundAlpha, percent: popProgress)
229+
setNeedsNavigationBarUpdate(barBackgroundAlpha: newBarBackgroundAlpha)
243230
}
244231

245232

@@ -299,11 +286,11 @@ extension UINavigationController
299286
let newTintColor = UIColor.middleColor(fromColor: fromTintColor, toColor: toTintColor, percent: pushProgress)
300287
setNeedsNavigationBarUpdate(tintColor: newTintColor)
301288

302-
// change navBar effectView alpha
303-
let fromEffectAlpha = fromVC?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
304-
let toEffectAlpha = toVC?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
305-
let newEffectAlpha = UIColor.middleAlpha(fromAlpha: fromEffectAlpha, toAlpha: toEffectAlpha, percent: pushProgress)
306-
setNeedsNavigationBarUpdate(effectAlpha: newEffectAlpha)
289+
// change navBar _UIBarBackground alpha
290+
let fromBarBackgroundAlpha = fromVC?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
291+
let toBarBackgroundAlpha = toVC?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
292+
let newBarBackgroundAlpha = UIColor.middleAlpha(fromAlpha: fromBarBackgroundAlpha, toAlpha: toBarBackgroundAlpha, percent: pushProgress)
293+
setNeedsNavigationBarUpdate(barBackgroundAlpha: newBarBackgroundAlpha)
307294
}
308295
}
309296

@@ -341,9 +328,10 @@ extension UINavigationController: UINavigationBarDelegate
341328
{
342329
let animations: (UITransitionContextViewControllerKey) -> () = {
343330
let curColor = context.viewController(forKey: $0)?.navBarBarTintColor ?? UIColor.defaultNavBarBarTintColor
344-
let curAlpha = context.viewController(forKey: $0)?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
331+
let curAlpha = context.viewController(forKey: $0)?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
332+
345333
self.setNeedsNavigationBarUpdate(barTintColor: curColor)
346-
self.setNeedsNavigationBarUpdate(effectAlpha: curAlpha)
334+
self.setNeedsNavigationBarUpdate(barBackgroundAlpha: curAlpha)
347335
}
348336

349337
// after that, cancel the gesture of return
@@ -388,11 +376,11 @@ extension UINavigationController: UINavigationBarDelegate
388376
let newTintColor = UIColor.middleColor(fromColor: fromTintColor, toColor: toTintColor, percent: percentComplete)
389377
setNeedsNavigationBarUpdate(tintColor: newTintColor)
390378

391-
// change navBar effectView alpha
392-
let fromEffectAlpha = fromVC?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
393-
let toEffectAlpha = toVC?.navBarEffectAlpha ?? UIColor.defaultEffectAlpha
394-
let newEffectAlpha = UIColor.middleAlpha(fromAlpha: fromEffectAlpha, toAlpha: toEffectAlpha, percent: percentComplete)
395-
setNeedsNavigationBarUpdate(effectAlpha: newEffectAlpha)
379+
// change navBar _UIBarBackground alpha
380+
let fromBarBackgroundAlpha = fromVC?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
381+
let toBarBackgroundAlpha = toVC?.navBarBackgroundAlpha ?? UIColor.defaultBackgroundAlpha
382+
let newBarBackgroundAlpha = UIColor.middleAlpha(fromAlpha: fromBarBackgroundAlpha, toAlpha: toBarBackgroundAlpha, percent: percentComplete)
383+
setNeedsNavigationBarUpdate(barBackgroundAlpha: newBarBackgroundAlpha)
396384

397385
wr_updateInteractiveTransition(percentComplete)
398386
}
@@ -407,10 +395,12 @@ extension UIViewController
407395
{
408396
static var pushToCurrentVCFinished: Bool = false
409397
static var pushToNextVCFinished:Bool = false
398+
410399
static var navBarBarTintColor: UIColor = UIColor.defaultNavBarBarTintColor
411-
static var navBarEffectAlpha:CGFloat = 1.0
400+
static var navBarBackgroundAlpha:CGFloat = 1.0
412401
static var navBarTintColor: UIColor = UIColor.defaultNavBarTintColor
413402
static var statusBarStyle: UIStatusBarStyle = UIStatusBarStyle.default
403+
414404
static var customNavBar: UINavigationBar = UINavigationBar()
415405
}
416406

@@ -464,16 +454,16 @@ extension UIViewController
464454
}
465455
}
466456

467-
// navigationBar effectView alpha
468-
var navBarEffectAlpha:CGFloat {
457+
// navigationBar _UIBarBackground alpha
458+
var navBarBackgroundAlpha:CGFloat {
469459
get {
470-
guard let effectAlpha = objc_getAssociatedObject(self, &AssociatedKeys.navBarEffectAlpha) as? CGFloat else {
460+
guard let barBackgroundAlpha = objc_getAssociatedObject(self, &AssociatedKeys.navBarBackgroundAlpha) as? CGFloat else {
471461
return 1.0
472462
}
473-
return effectAlpha
463+
return barBackgroundAlpha
474464
}
475465
set {
476-
objc_setAssociatedObject(self, &AssociatedKeys.navBarEffectAlpha, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
466+
objc_setAssociatedObject(self, &AssociatedKeys.navBarBackgroundAlpha, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
477467

478468
if customNavBar.isKind(of: UINavigationBar.self) {
479469
let navBar = customNavBar as! UINavigationBar
@@ -482,7 +472,7 @@ extension UIViewController
482472
else
483473
{
484474
if pushToCurrentVCFinished == true && pushToNextVCFinished == false {
485-
navigationController?.setNeedsNavigationBarUpdate(effectAlpha: newValue)
475+
navigationController?.setNeedsNavigationBarUpdate(barBackgroundAlpha: newValue)
486476
}
487477
}
488478
}
@@ -582,7 +572,7 @@ extension UIViewController
582572
func wr_viewDidAppear(_ animated: Bool)
583573
{
584574
navigationController?.setNeedsNavigationBarUpdate(barTintColor: navBarBarTintColor)
585-
navigationController?.setNeedsNavigationBarUpdate(effectAlpha: navBarEffectAlpha)
575+
navigationController?.setNeedsNavigationBarUpdate(barBackgroundAlpha: navBarBackgroundAlpha)
586576
navigationController?.setNeedsNavigationBarUpdate(tintColor: navBarTintColor)
587577
wr_viewDidAppear(animated)
588578
}
@@ -619,9 +609,9 @@ extension DispatchQueue {
619609
extension UIColor
620610
{
621611
fileprivate struct AssociatedKeys
622-
{
623-
static var defNavBarBarTintColor: UIColor = UIColor.white // UIColor.init(red: 0/255.0, green: 175/255.0, blue: 240/255.0, alpha: 1)
624-
static var defNavBarTintColor: UIColor = UIColor.white
612+
{ // default is system attributes
613+
static var defNavBarBarTintColor: UIColor = UIColor.white
614+
static var defNavBarTintColor: UIColor = UIColor(red: 0, green: 0.478431, blue: 1, alpha: 1.0)
625615
static var defStatusBarStyle: UIStatusBarStyle = UIStatusBarStyle.default
626616
}
627617
class var defaultNavBarBarTintColor: UIColor {
@@ -660,7 +650,7 @@ extension UIColor
660650
}
661651
}
662652

663-
class var defaultEffectAlpha: CGFloat {
653+
class var defaultBackgroundAlpha: CGFloat {
664654
get {
665655
return 1.0
666656
}
@@ -684,11 +674,11 @@ extension UIColor
684674
toColor.getRed(&toRed, green: &toGreen, blue: &toBlue, alpha: &toAlpha)
685675

686676
// calculate middle color RGBA
687-
let nowRed = fromRed + (toRed - fromRed) * percent
688-
let nowGreen = fromGreen + (toGreen - fromGreen) * percent
689-
let nowBlue = fromBlue + (toBlue - fromBlue) * percent
690-
let nowAlpha = fromAlpha + (toAlpha - fromAlpha) * percent
691-
return UIColor(red: nowRed, green: nowGreen, blue: nowBlue, alpha: nowAlpha)
677+
let newRed = fromRed + (toRed - fromRed) * percent
678+
let newGreen = fromGreen + (toGreen - fromGreen) * percent
679+
let newBlue = fromBlue + (toBlue - fromBlue) * percent
680+
let newAlpha = fromAlpha + (toAlpha - fromAlpha) * percent
681+
return UIColor(red: newRed, green: newGreen, blue: newBlue, alpha: newAlpha)
692682
}
693683

694684
// Calculate the middle alpha

0 commit comments

Comments
 (0)