Swift斗鱼直播--首页处理TitleView和Content
作者:
喵鸢 | 来源:发表于
2017-03-13 03:14 被阅读219次
优化
- 问题1:contentView中定义了一个parentVC对其是个强引用;与HomeVC对contentView是强引用,会造成循环引用,会造成无法销毁,
- 问题2:闭包中使用self,最后使用weak,否则也会有循环引用
1.PageTitleView中点击
- 1️⃣titleView中逻辑处理:按钮选中状态,滑块移动
- 2️⃣告诉contentView滚动到对应控制器界面
步骤
- 1️⃣给label添加点击手势
- extension监听点击的方法
- 1.获取当前label --- 手势.view转换label
- 2.获取之前的label --- 定义属性保存,默认是0
- 3.切换文字的颜色
- 4.保存最新label下标值
- 5.滚动条滚动到最新label下
- 6.对应contentView也要滚动 --- 注意:titleView和contentView是两个独立的UIView,他们产生关系的位置是HomeVC中,只能讲titleView的滚动消息告诉HomeVC,让HomeVC告诉contentView需要滚动 ------ 闭包 通知 代理
关于代理
- 协议后面要加上class,只能被类遵守,防止其他类型也可以使用就无法将协议中的属性定义成可选类型
2.处理contentView的滚动
- 1️⃣如何监听滚动?collectionView的代理
- 在滚动的时候(代理方法中)需要获取的数据
- a.progress滚动进度
- b.sourceIndex(原来标题下标)
- c.targetIndex(目标滚动标题下标)
- 思路
- a.判断左滑or右滑
- b.将数据通过代理传到titleView
- 1.取出sourceLabel和targetLabel
- 2.处理滑动条逻辑
- 3.颜色渐变
- c.点击title而不是挪动下面的contentView的时候,会调用titleView中的代理方法,进而通知contentView的代理方法去计算offset等数据再传递给titleView进行label的设置,其实是多余的,点击title时应该直接改变label颜色 而不需要计算offset!
- 定义一个布尔值isForbidScrollDelegate,判断当前是否是titleView的点击
- 初始化值为false
- 如果是true在pageContentView的scrollView代理方法中直接return
- pageContentView中对外(除本类)提供了一个设置对应currentIndex的方法(根据传入的index设置当前pageContentView);若对外使用该方法,则isForbidScrollDelegate = true (应该直接设置,而并非需要contentView计算)
- d.bug:滑动后在点击其他label两个都会是橘色
- 在TitleView中,根据contentView设置label之后,要记录已经最新的label下标值
本文标题:Swift斗鱼直播--首页处理TitleView和Content
本文链接:https://www.haomeiwen.com/subject/fgxfnttx.html
网友评论