9512.net
甜梦文库
当前位置:首页 >> 计算机软件及应用 >>

iOS培训-斗鱼直播APP之弹出房间界面



玩转【斗鱼直播 APP】系列之弹出房间界面
作者:小码哥教育

功能说明
区分弹出秀场&普通房间 如果用户是秀场直播,那么弹出秀场房间界面 如果用户是电脑直播,那么弹出普通房间界面 秀场界面弹出 直接以 Model 方式,从底部弹出即可 普通界面弹出 将界面 PUSH 出来 注意: 1> 界面 push 之后,不能再显示 UITabbar(默认依然在下面) 2> 弹出的界面需要因此导航栏,但是首页导航栏依然正常展示 3> 弹出完成后,实现全屏 Pop,手势左滑退出控制器

效果展示

弹出功能实现
监听 UICollectionView 的 Cell 点击 在 BaseAnchorViewController 中实现对应的代码方法监听即可 创建两个房间的控制器(房间不同,需要创建两个控制器)

RoomNormalViewController(普通房间控制器) RoomShowViewController(秀场房间控制器) 在监听 Cell 点击方法中执行弹出逻辑 取出对应的 AnchorModel 对象 根据 anchor 中的 isVertical 属性,判断弹出方式 0 : 电脑直播 1 : 手机直播 根据方式,弹出控制器即可

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

func collectionView(_ collectionView:UICollectionView, didSelectItemAt indexPath:IndexPath){ // 1.取出主播信息 let anchor = baseVM.anchorGroups[indexPath.section].anchors[indexPath.item] // 2.判断是手机直播&电脑直播 anchor.isVertical ==1? presentShowLiveVM(anchor: anchor): pushNormalLiveVM(anchor: anchor) } private func presentShowLiveVM(anchor :AnchorModel){ // 创建控制器 let showVC =RoomShowViewController() // 弹出 present(showVC, animated:true, completion:nil) } private func pushNormalLiveVM(anchor :AnchorModel){ // 1.创建控制器 let normalVC =RoomNormalViewController() // 2.push navigationController?.pushViewController(normalVC, animated:true) }

显示&隐藏 UINavigationBar
显示&隐藏 UINavigationBar 使用下面方法即可 navigationController.setNavigationBarHidden(true, animated: true) true : 隐藏 false : 显示 在 RoomNormalViewController 的系统回调方法中分别执行对应的方法 viewWillAppear:执行隐藏方法 viewWillDisappear:执行显示方法 注意: 这样做会产生一个问题,就是原来系统的左边缘的滑动退出控制器手势无效了 一旦我们隐藏了导航栏,那么该手势就会自动失效 如果希望继续显示,则需要按照下面的步骤 1> navigationController?.interactivePopGestureRecognizer?.delegate = self 2> navigationController?.interactivePopGestureRecognizer?.isEnabled = true 代码如下:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

classRoomNormalViewController:UIViewController,UIGestureRecognize rDelegate{ override func viewDidLoad(){ super.viewDidLoad() view.backgroundColor =UIColor.purple // 保留 Pop 手势 navigationController?.interactivePopGestureRecognizer?.delegate=self navigationController?.interactivePopGestureRecognizer?.isEnabled =true

11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.

}

override func viewWillAppear(_ animated:Bool){ super.viewWillAppear(animated) navigationController?.setNavigationBarHidden(true, animated:true) } override func viewWillDisappear(_ animated:Bool){ super.viewWillDisappear(animated) navigationController?.setNavigationBarHidden(false, animated:true) } }

隐藏 UITabbar
在 push 时隐藏 UITabbar 非常简答 因为系统已经提供了一个控制器的属性 设置控制器的 hidesBottomBarWhenPushed 为 true 即可 注意:所有的 push 控制器其实都需要因此,那么怎么办呢? 方案一:抽取统一的父类 方案二:截取 push 过程,在 push 的那一刻,设置控制器的属性 该位置采取方案二:更为简单 如何截取? 自定义 UINavigationController 重写 pushViewController(_ viewController: UIViewController, animated: Bool) 方法 将之前的 UINavigationController 改成自定义的

代码如下:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

classCustomNavigationController:UINavigationController{ override func viewDidLoad(){ super.viewDidLoad() } override func pushViewController(_ viewController:UIViewController, animated:Bool){ viewController.hidesBottomBarWhenPushed =true super.pushViewController(viewController, animated: animated) } }

添加全屏 Pop 手势
思路分析:添加全屏 Pop 手势一直以来都有两种实现思路
方式一:自己在 Push 出来的 View 中添加 UIPanGestureRecognizer 手势 添加手势,监听手势滑动 随着手势滑动,逐渐退出控制器的 View 优点:最容易想到,使用自定义专场即可实现 缺点:较为麻烦 方式二:利用运行时机制,获取系统的 Pop 手势 target&action 获取系统的手势监听 View 获取系统的手势 target&action 创建自己的手势,添加事件监听时,使用上步中的 target&action 将手势,添加到系统手势监听的 View 中 优点:实现非常简单 缺点:需要用到运行时机制,且不容易想到

实现方案:方案二(简单)
该位置我们采用第二种实现方案,也是我个人常用的实现方案 首先,我们已经知道系统是有一个左滑手势 该左滑手势只能在左边缘滑动才会生效 但是该手势的 View&target&action 系统已经创建好了 我们可以自己创建一个手势,但是利用系统的 View&target&action 问题? 1> 如果获取系统手势的 View? 比如简单,因为可以直接获取 interactivePopGestureRecognizer 手势 interactivePopGestureRecognizer.view 即可获得 2> 如果获取 target&action 该方式较为麻烦,需要使用 KVC 通过某一些 Key 来获取可接 3> 通过哪些 key 呢?

需要用运行时,遍历所有的属性找到

?

代码分析: classCustomNavigationController:UINavigationController{ override func viewDidLoad(){ super.viewDidLoad() // 1.取出手势&view guard let gesture = interactivePopGestureRecognizer else{return} gesture.isEnabled =false let gestureView = gesture.view // 2.获取所有的 target let target =(gesture.value(forKey:"_targets")as?[NSObject])?.first guard let transition = target?.value(forKey:"_target")else{return} let action =Selector(("handleNavigationTransition:")) // 3.创建新的手势 let popGes =UIPanGestureRecognizer() popGes.maximumNumberOfTouches =1 gestureView?.addGestureRecognizer(popGes) popGes.addTarget(transition, action: action) } override func pushViewController(_ viewController:UIViewController, animated:Bool){

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

24. 25. 26. 27.

viewController.hidesBottomBarWhenPushed =true super.pushViewController(viewController, animated: animated) } }



更多相关文章:
iOS培训-斗鱼直播APP之首页布局分析实现
iOS培训-斗鱼直播APP之首页布局分析实现_计算机软件及应用_IT/计算机_专业资料。...(frame: frame) } 设置 UI 界面内容 设置 UI 界面 将所有的子控制器添加到...
iOS培训-斗鱼直播APP之首页导航栏设置
iOS培训-斗鱼直播APP之首页导航栏设置_计算机软件及应用_IT/计算机_专业资料。本文档的主要内容是小码哥教育iOS培训课程的斗鱼直播APP之首页导航栏设置的相关知识点...
iOS培训-斗鱼直播APP之请求展示推荐数据
iOS培训-斗鱼直播APP之请求展示推荐数据_计算机软件及...比如之前的 ASIHTTPRequest 就出现了不更新的情况 ...(因为界面中有用到分组) 因此请求分成五步曲 请求...
iOS培训-斗鱼直播APP之娱乐基本展示_图文
iOS培训-斗鱼直播APP之娱乐基本展示_互联网_IT/计算机_专业资料。本文档的主要...() } } // MARK:- 设置 UI 界面内容 extension BaseAnchorViewController{ ...
iOS培训-斗鱼直播APP之获取APP图片资源
iOS培训-斗鱼直播APP之获取APP图片资源_计算机软件及应用_IT/计算机_专业资料。本文档的主要内容是小码哥教育iOS培训课程的斗鱼直播APP之获取APP图片资源的相关知识点...
iOS培训-斗鱼直播APP之直播总体概览
iOS培训-斗鱼直播APP之直播总体概览_计算机软件及应用_IT/计算机_专业资料。本文档的主要内容是小码哥教育iOS培训课程项目斗鱼直播APP之直播总体概览的详细讲解。...
iOS培训-斗鱼直播APP之利用青花瓷抓取数据
iOS培训-斗鱼直播APP之利用青花瓷抓取数据_计算机软件及应用_IT/计算机_专业资料。本文档的主要内容是小码哥教育iOS培训课程的斗鱼直播APP之利用青花瓷抓取数据的相关...
iOS培训-斗鱼直播APP之项目部署
iOS培训-斗鱼直播APP之项目部署_计算机软件及应用_IT/计算机_专业资料。本文档的主要内容是小码哥教育iOS培训课程的斗鱼直播APP之项目部署的相关知识点。...
iOS培训-斗鱼直播APP之游戏推荐展示
iOS培训-斗鱼直播APP之游戏推荐展示_计算机软件及应用_IT/计算机_专业资料。本...来实现 一方面可以循环利用,另一方面 UICollectionView 真的非常好用喔 界面搭建 ...
iOS培训-斗鱼直播APP之采集视频_图文
iOS培训-斗鱼直播APP之采集视频_计算机软件及应用_IT/计算机_专业资料。本文档的主要内容是小码哥教育iOS培训课程项目斗鱼直播APP之采集视频的详细讲解。...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图