iOS: 想请教一下喜马拉雅当前版本(6.6.66)中订阅节目详情页面的实现逻辑

2020-05-30 16:25:40 +08:00
 xingheng

录了一段简单的操作视频,直接扔百度网盘了。

链接: https://pan.baidu.com/s/1li9Q-ORycj4VMAmplWr3Iw 提取码: 49ia 复制这段内容后打开百度网盘手机 App,操作更方便哦

我的猜想:暗红色底部是一个普通的 UIViewController (暂且叫 VC1 ),嵌入一个 UIScrollView (暂且叫 SV1 ),然后白底浮层的 View 应该是在一个 UIPageViewController (暂且叫 VC2 )里面,VC2 里面的嵌套的应该是 page content view controller,其他再嵌套了 table/scroll view (暂且叫 SV2 ),然后整个 VC2 被加到 VC1 里面作为 child 。至于 pan 手势的处理,我猜想应该是应该是对直接针对两个 ScrollView 做了单独的手势冲突处理。

简单说一下实现的要点:

  1. 初始状态滑动 SV1 的时候的 SV2 是直接 pin 到 SV1 里面一起联动的。
  2. 从下往上快速滑动,当 SV2 到达顶部的时候是 SV2 开始减速。
  3. SV2 的顶部灰色条可以在任何状态被上下拉拽而不影响 SV2 的 offset 。
  4. SV2 中支持左右横向滑动。

很想知道有没有更好的解法,期望找到更快速的 native 布局解决方法,请赐教。

1719 次点击
所在节点    移动开发
3 条回复
lnim
2020-06-05 18:11:06 +08:00
没有这么复杂~ 想简单点~
三个滑动状态:
A. SV1 滑动
B. SV2 顶部按住滑动
C. SV2 滑动

状态 A: SV1 的 scrollViewDidScroll 回调里边, 设置 SV2 的 frame.y 和 contentOffset 绑定
状态 B: 顶部按钮添加个手势, 拿到手势回调, 回调里边有拖动的位置 设置 SV2 的 frame.y

1, 3 这就解决了

2. 这个加个判断呗~ 滑动到一定距离的时候 关闭手势拖动~ 直接一个上滑动画

4. 这个无所谓吧, 实现方案太多了, StackView + UIScrollView || UICollectionView || UITableView
xingheng
2020-06-07 09:35:44 +08:00
@lnim 加“上滑动画”确实是个办法,仔细再试了几次他们的减速逻辑,确实很可能就是这么做的。
jessefang
2021-05-10 14:21:44 +08:00
@xingheng 你好,麻烦请教下“从下往上快速滑动,当 SV2 到达顶部的时候是 SV2 开始减速“这个阶段,什么方式可以把 SV2 到达顶部时,能模拟出 SV1 继续滑动的效果的呢?看喜马拉雅效果就像使用了一个 Scrollview 似的,SV1 跟 SV2 的滚动感觉很丝滑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/676979

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX