仿京东金融首页滑动效果并添加悬浮

最近在做的一个项目中需要用到京东金融首页滑动卡片两边留白的效果,所以针对这个效果研究探索了一下。京东金融这个效果从直观视觉来看可能较为简单,但仔细看的话不难看出每张卡片两边 都有上一个或者下一个卡片的边框。那么针对这样的效果应该如何去解析和制作 。我们先来看看京东金融的首页实现效果:

京东金融效果.gif

通过上面的gif图仔细看的话我们可以看出京东那边做的是一个联动效果卡片View和下面的ScrollView有一个联动的效果,所以下面横滑TabbleView的时候可以明显看出下面的滑动会稍微快些

根据以上的一个分析,我们尝试去做了下,下面是我们开发完成后的一个样式,比京东金融多了一个功能就是上滑的时候有悬浮效果

钱街效果.gif


到这里我们开始查看实现步骤与代码:

1.以上已经说明这个效果实现是做的联动。所以我们一定是需要两个ScrollView。这里暂时叫 topScrollView 与 bottomScrollView;并且这里我们可以定义bottomScorllView上的ControllView;我们写好之后大致是这样的一个样式:
9161F280F3388F731C2BAE14AF35CEC5.png

上面这个截图是我这边已经加进去了三个VC和TopScrollView上面的卡片。接下来我们要先做左右滑动时的一个联动效果。

2.联动效果实现

(1)我们要实现联动就一定要先实现ScrollView的滑动代理

#pragma mark - UIScrollViewDelegate

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:kYJHomeNavTopSliderNotification object:nil];
    if (scrollView == self.topScrollView)
    {
        _witchScrollView = 1;
    }
    else if (scrollView == self.mainScrollView)
    {
        _witchScrollView = 2;
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView == self.mainScrollView && _witchScrollView == 2)
    {
        [self.topScrollView setContentOffset:CGPointMake(scrollView.contentOffset.x * (self.topScrollView.frame.size.width)/(UIScreenWidth), 0)];
    }
    
    if (scrollView == self.topScrollView && _witchScrollView == 1)
    {
        [self.mainScrollView setContentOffset:CGPointMake(scrollView.contentOffset.x * (UIScreenWidth/self.topScrollView.frame.size.width), 0)];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSInteger currentselegate = 0;
    if (scrollView == self.mainScrollView && _witchScrollView == 2)
    {
       currentselegate  = scrollView.contentOffset.x/scrollView.frame.size.width;
        self.navTopView.currentIndex = currentselegate; //这里关联btn与Scr
    }
    
    if (scrollView == self.topScrollView && _witchScrollView == 1)
    {
       NSInteger currentselegate = (scrollView.contentOffset.x)/(scrollView.frame.size.width - XX_6(10));
        self.navTopView.currentIndex = currentselegate; //这里关联btn与Scr
    }
}

(2)其实这里在做的时候联动效果很差,下面的滑动一半过去了,上面的TopScrollview才跟着滑动,所以网上找了一些资料看了下,这里需要计算,就是用屏幕的宽度去除以我们topScrollview的宽度,也就是我们卡片View的宽度

[self.topScrollView setContentOffset:CGPointMake(scrollView.contentOffset.x * (UIScreenWidth/self.topScrollView.frame.size.width), 0)];

这样我们看到的效果则就是上下滑动是一致的,根据滑动速度,下面可能会比上面快一点点,但是不会影响,联动这里需要注意的则是我们在滑动过程中我们一定要用我们顶部的TopScrollview的宽度去计算,所以我这里topScrollview并不是屏幕的宽度,而是居中布局给了300的宽度。并且这个宽度也是我View的宽度

3.联动效果实现之后我们需要处理的是上下滑动时的联动了。

(1)上下联动我们应该都知道的,tabbleView是属于Scrollview的子类,所以可以调用Scrollview的代理方法,这个TabbleView是添加在BottomScrollview上的VC中的,因为我们在bottomScrollview上面添加了三个VC,也就是对应的三个页面。

#pragma mark - TableViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if ([self.delegate respondsToSelector:@selector(homeLoanTableScrollViewDidScroll:)])
    {
        [self.delegate homeLoanTableScrollViewDidScroll:scrollView];
    }
}

(2)这里用代理开到最底层的VC中去,实现代理。

//首页
- (void)homeLoanTableScrollViewDidScroll:(UIScrollView *_Nullable)scrollView
{
    //这里这样写主要是为了当你下拉的时候保证Tabble不会下拉,否则和下面的代码会有冲突,产生莫名的抖动
    if (scrollView.contentOffset.y <= -0.05)
    {
        [self.loanVC.tableView.tableView setContentOffset:CGPointMake(0, 0)];
        return;
    }
    //更新顶部topScrollview 的约束,我这边是将topScrllview添加到一个底部的TopView上的,大小一致,开发中也可以添加。
    [self.topView mas_updateConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.contentView).offset(-(scrollView.contentOffset.y));
    }];
    [self.contentView updateConstraints];

   //这两句最重要的两句,因为我们在滑动其中任何一个界面的时候其他两个界面也需要跟着滑动的,所以我们这边要在1VC中去更改 2、3 VC中的偏移量。同理后面的也是一样。
    [self.creditCardVC.tableView.tableView setContentOffset:CGPointMake(0, fabs(scrollView.contentOffset.y))];
    [self.speedLoanVC.tableView.tableView setContentOffset:CGPointMake(0, fabs(scrollView.contentOffset.y))];
}
4.上下与左右联动都已经实现了,那么这里就需要说一下悬浮效果如何加进去

(1)悬浮效果很多人都做过,但是在京东金融这样的首页效果中如何加入悬浮,这里就需要我们好好思考了。我这边自身之前有使用过 contentInset 来实现悬浮。我们需要的悬浮效果则是需要整个页面整体一起上滑,到顶部后再去固定某一个View。所以当时使用 contentInset 确实是可以实现的。但是当做到一个VC滑动,也要更改另外两个VC偏移量的时候就会出现各种问题,首先通过代理滑动第一个VC中的偏移量,那么另外两个VC就要不停的去设置 contentInset 加上不停的去修改VC中顶部需要悬浮的View。这种做法造成代码臃肿和代码冲突各种问题。

解决方案:
首先我们知道TabbleView自身本就支持Section悬浮。所以我们就将bottomScrollview设置成全屏,然后topScrollview放置最顶层覆盖在bottom上面即可,然后我们vc也是全屏的高度,那么TabbleView要空出顶部TopScrollviewde 高度,这里我们可以直接使用一个空的Cell空出来即可。

这里是朋友从网上找寻的一个Demo在上面进行了修改并添加悬浮的效果又上传到自己码云上的。如果有需要则可以拉取代码进行查看,不明白的地方可以简书留言。git地址:https://gitee.com/gzxapp/jindongjinrong

在这里顺便推荐一篇大神的文章,各位可根据此篇文章进行查看京东金融的具体做法。https://www.jianshu.com/p/48bec8e86add

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容