iOS: 想请教一下喜马拉雅当前版本(6.6.66)中订阅节目详情页面的实现逻辑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xingheng
V2EX    移动开发

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

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

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

    链接: 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     Solana     2728 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:44 PVG 22:44 LAX 07:44 JFK 10:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86