美文网首页iOS技术点
iOS 仿微博、闲鱼、转转等APP 满足垂直滑动视图,扩展水平滑

iOS 仿微博、闲鱼、转转等APP 满足垂直滑动视图,扩展水平滑

作者: 早起的小孩没饭儿吃 | 来源:发表于2018-01-05 15:54 被阅读417次

    先放个代码链接
    (微博模式):https://github.com/qussers/IZJHorizontalTableView
    (闲鱼模式):https://github.com/qussers/IZJVerticalHrizontalView
    这类APP普遍满足多个或全部特点:
    1、存在一个头部视图,或者说垂直滑动的视图。
    2、在垂直滑动的视图下方,一般还有个停驻的视图。
    3、在停驻视图下方,存在水平切换的多个视图。
    4、水平切换的视图中,包含垂直滑动视图。并且垂直的滑动能联动头部视图的滑动。
    5、头部视图的响应链本身完整。
    6、整体的垂直滑动能够丝滑,并且有弹簧效果。

    微博的效果和闲鱼或者转转等二手交易平台的滑动效果不同点在于,微博的头部滑动止于停驻视图,而类似闲鱼的这种,贯穿整个视图。两种效果的实现方案各不相同,下面分开说。

    第一种:继承自UITableVIew
    适用情况: 垂直方向有大量视图需要加载,列表比较长,自定义性能要求高。
    层级结构:
    0:UITableView
    1: TableVIew的Footer添加CollectionView
    2: CollectionView添加横向滑动的ScrollView
    要点:
    通过重写

    • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer ;
      达到底层TableView能够相应上层滑动的效果。
      为了优化体验,对水平和垂直加速度进行判断,规避双方向滑动。
      通过监听各自ContentOffset从而控制各层ScrollView联动。

    第二种:继承自UIView
    适用情况:垂直headerVIew比较轻量,多类似头部视图高度较小。
    层级结构:
    0:UIView
    1:UIView->UICollectionView
    2: UICollectionView->ScrollView
    3: ScrollView-> HeaderView
    要点:
    横向滑动时,偷梁换柱, 数据源传入ScrollView,并设置ContentInset, 将HeaderView从ScrollView上转移添加到UIView上,横向滑动结束后,再切换到ScrollView。头部视图添加一个父视图(这里我用了一个ScrollView稍稍扩大了下contentSize的宽度),接收横向滑动响应链条,从而阻断下层的横向滑动响应。

    image.png

    更一般的自定义效果如:


    横向滑动2.gif

    相关文章

      网友评论

      • 胡子仙森:微博模式下有两个滚动条,能统一成一个吗
      • 青鸟evergreen:楼主微博模式下横向滑动的contentsize是写死的,如何做到高度自适应啊
      • jozdee:大神,厉害👍
      • __blossom:兄弟,你这demo写得这个真棒!但是那个微博模式的我发现个bug,self.tableview的row设置行数较少的话,下面的滚动视图滑动显示不全了。
        胡子仙森:@__blossom 确实是这样,找到怎么回事了吗,试了好多方法也没解决这个问题
        __blossom:我试了一下,self.tableView 的行数设置少于19就会出现这个bug
      • A张三疯:兄弟,有一个问题,当头部视图高度大于屏幕高度时,segmentView会在初始化的时候停留在屏幕底部
      • A张三疯:兄dei,你很棒,写的很不错,思路清晰!给你一个大大的赞

      本文标题:iOS 仿微博、闲鱼、转转等APP 满足垂直滑动视图,扩展水平滑

      本文链接:https://www.haomeiwen.com/subject/ysrsnxtx.html