正文
setBackgroundImage(
UIImage
(),
for
: .
default
)
backgroundView =
UIView
(frame:
CGRect
(x:
0
, y:
0
, width:
Int
(bounds.width), height:
64
))
subviews.first?.insertSubview(backgroundView ??
UIView
(), at:
0
)
}
backgroundView?.backgroundColor = color
}
fileprivate
func
wr_setBackgroundAlpha(alpha:CGFloat)
{
let
barBackgroundView = subviews[
0
]
barBackgroundView.alpha = alpha
}
4.2 你以为就这样结束了吗,来看看下面的问题,当由透明的导航栏右滑到不透明的导航栏看看会出现什么情况?
4.3 处理右滑返回手势问题
我们都知道,导航栏是属于导航控制器的,一个导航栏不可能出现两个颜色,那么右滑突兀怎么解决呢?两个方法,一个方法是自定义导航栏(后面会说),另一个方法是改变导航栏颜色,我们假设当前控制器为fromVC,返回的控制器为toVC,如果可以实现从
fromVC 右滑到 toVC 导航栏颜色渐变那么问题就解决了!但是导航栏只有一个颜色啊~~~怎么办?
同样,可以通过加一层的方法来解决。我们可以记录一下 fromVC消失前对应的导航栏颜色 和 toVC 当前的导航栏颜色,然后根据右滑进度percentComplete,来计算渐变色,这样问题就解决了!
记录ViewController对应导航栏的颜色和透明度
navBarBarTintColor: UIColor { get { guard let barTintColor = objc_getAssociatedObject(self, &AssociatedKeys.navBarBarTintColor) as? UIColor else { return UIColor.defaultNavBarBarTintColor
} return barTintColor
} set {
objc_setAssociatedObject(self, &AssociatedKeys.navBarBarTintColor, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) if customNavBar.isKind(of: UINavigationBar.self) { let navBar = customNavBar as! UINavigationBar
navBar.wr_setBackgroundColor(color: newValue)
} else
{ if pushToCurrentVCFinished == true && pushToNextVCFinished == false {
navigationController?.setNeedsNavigationBarUpdate(barTintColor: newValue)
}
}
}
} navBarBackgroundAlpha:CGFloat { get { guard let barBackgroundAlpha = objc_getAssociatedObject(self, &AssociatedKeys.navBarBackgroundAlpha) as? CGFloat else { return 1.0
} return barBackgroundAlpha
} set {
objc_setAssociatedObject(self, &AssociatedKeys.navBarBackgroundAlpha, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) if customNavBar.isKind(of: UINavigationBar.self) { let navBar = customNavBar as! UINavigationBar
navBar.wr_setBackgroundAlpha(alpha: newValue)
} else
{ if pushToCurrentVCFinished == true && pushToNextVCFinished == false {
navigationController?.setNeedsNavigationBarUpdate(barBackgroundAlpha: newValue)
}
}
}
}
交换系统方法 _updateInteractiveTransition(监控右滑返回手势的进度)
{ guard let topViewController = topViewController, let coordinator = topViewController.transitionCoordinator else {
wr_updateInteractiveTransition(percentComplete) return
} let fromVC = coordinator.viewController(forKey: .from) let toVC = coordinator.viewController(forKey: .to)
updateNavigationBar(fromVC: fromVC, toVC: toVC, progress: percentComplete)
wr_updateInteractiveTransition(percentComplete)
}