V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xingheng
V2EX  ›  移动开发

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

  •  
  •   xingheng · 2020-05-30 16:25:40 +08:00 · 1864 次点击
    这是一个创建于 1630 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    链接: 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 布局解决方法,请赐教。

    3 条回复    2021-05-10 14:21:44 +08:00
    lnim
        1
    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
        2
    xingheng  
    OP
       2020-06-07 09:35:44 +08:00
    @lnim 加“上滑动画”确实是个办法,仔细再试了几次他们的减速逻辑,确实很可能就是这么做的。
    jessefang
        3
    jessefang  
       2021-05-10 14:21:44 +08:00
    @xingheng 你好,麻烦请教下“从下往上快速滑动,当 SV2 到达顶部的时候是 SV2 开始减速“这个阶段,什么方式可以把 SV2 到达顶部时,能模拟出 SV1 继续滑动的效果的呢?看喜马拉雅效果就像使用了一个 Scrollview 似的,SV1 跟 SV2 的滚动感觉很丝滑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   981 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 22:28 · PVG 06:28 · LAX 14:28 · JFK 17:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.