• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - iOS 10 中清晰和半透明 UINavigationBar 状态之间的转换

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:38:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

从 iOS 10 开始,联系人应用程序通过 UINavigationBar 的实现具有非常有趣的视觉效果。

从 Root View Controller 来看,该栏看起来很正常,但在点击联系人时,播放的动画将只是导航栏的背景淡出以完全清除,半透明效果也缩小为无同时。

过渡完成后,导航栏的后退按钮等控件还在;这意味着它实际上并没有被隐藏。

当接触 View Controller 被弹出时,动画会反向播放,甚至可以通过UINavigationController的'swipe-back'功能来控制:

Example of the effect

有谁知道如何实现这个功能?我想可以通过继承 UINavigationBar 并手动控制背景 View 的状态来获得这种效果,但我真的希望避免这种情况,因为我发现让第三方导航栏与状态栏不容易。我想知道是否有办法从系统中免费获取它。



Best Answer-推荐答案


您可以使用 UIGestureRecognizerUIVisualEffect 实现从 cleartranslucent 的导航栏 View 转换。

主 VC:

override func viewWillAppear(_ animated: Bool) {
    navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
}

详细VC中:

UIGestureRecognizerDelegate 实现到您的 Class 并使用以下代码。

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
}

输出:

enter image description here

关于ios - iOS 10 中清晰和半透明 UINavigationBar 状态之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43886492/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap