在iOS 10中的透明和半透明UINavigationBar状态之间转换
从iOS 10开始,Contacts应用程序实现了在iOS 10中的透明和半透明UINavigationBar状态之间转换,ios,uikit,uinavigationbar,core-animation,ios10,Ios,Uikit,Uinavigationbar,Core Animation,Ios10,从iOS 10开始,Contacts应用程序实现了UINavigationBar,具有非常有趣的视觉效果 从根视图控制器中,该条显示为正常,但在点击触点时,播放的动画将仅使导航条的背景淡出至完全清晰,同时半透明效果也将缩小为零 转换完成后,导航栏上的后退按钮和其他控件仍然存在;这意味着它实际上并没有被隐藏 弹出“联系人视图”控制器时,动画将反向播放,甚至可以通过UINavigationController的“向后滑动”功能进行控制: 有人知道如何实现这个功能吗?我想通过子类化UINavigat
UINavigationBar
,具有非常有趣的视觉效果
从根视图控制器中,该条显示为正常,但在点击触点时,播放的动画将仅使导航条的背景淡出至完全清晰,同时半透明效果也将缩小为零
转换完成后,导航栏上的后退按钮和其他控件仍然存在;这意味着它实际上并没有被隐藏
弹出“联系人视图”控制器时,动画将反向播放,甚至可以通过UINavigationController
的“向后滑动”功能进行控制:
有人知道如何实现这个功能吗?我想通过子类化
UINavigationBar
并手动控制背景视图的状态可以获得这种效果,但我真的希望避免这种情况,因为我发现让第三方导航栏更好地使用状态栏并不容易。我想知道是否有办法从系统中免费获取它。您可以使用UIGestureRecognitor
和UIVisualEffect
实现导航栏视图从清除
到半透明
的转换
在主VC中:
override func viewWillAppear(_ animated: Bool) {
navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
}
在详细信息VC中:
将UIgestureRecognitizerDelegate
实现到您的类中,并使用下面的代码
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
}
override func viewWillAppear(_ animated: Bool) {
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
let navigationBarBlurView = UIView(frame: CGRect(x:0, y:0, width:view.frame.size.width, height: UIApplication.shared.statusBarFrame.height + (navigationController?.navigationBar.frame.height)!))
let blurEffect = UIBlurEffect(style: .light) // Set any style you want(.light or .dark) to achieve different effect.
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = navigationBarBlurView.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
navigationBarBlurView.addSubview(blurEffectView)
view.addSubview(navigationBarBlurView)
return true
}
输出:
检查我的答案,让我知道它是有效的。代码已更新……噢,哇!看来你成功了!嗯,我刚刚尝试了你的代码,但是在
statusBarView.addSubview(blurEffectView)
上失败了。在本例中,statusBarView
是什么?