美文网首页电商
iOS仿淘宝详情页,支付宝首页上滑效果

iOS仿淘宝详情页,支付宝首页上滑效果

作者: 雨洒潇湘 | 来源:发表于2017-11-22 11:31 被阅读880次

    功能需求

    最近需要修改商品详情页,其他没什么就是一个多种Cell的列表,关键是其中的一个效果不太好实现。


    商品详情gif.gif

    要求轮播图滑动的速率慢于轮播图以下部分滑动的速率。给人一种轮播图被遮盖的错觉。

    主要思路

    刚开始感觉就是用tableView可以搞定,结果无论我怎么写,都不会有这种遮盖效果。只好问度娘,还真有人写出来了,大概原理如下:首先需要用到scrollView和tableView两个主要控件。将轮播图部分和tableView部分子上而下的放到scrollView上面,然后给足tableView所使用的高度,只能大不能小。这一点很重要,只有将tableView的高度给够了,tableView才不会滑动(这个思路很巧妙)。再根据实际需要设置scollView的contentSize。然后再在- (void)scrollViewDidScroll:(UIScrollView *)scrollView的方法中设置轮播图的和tableView的frame和origin,将轮播图的origin设置成偏移量的二分之一。将tableView的origin设置成偏移量。

    代码实现

    #import "GoodsDetail1ViewController.h"
    @interface GoodsDetail1ViewController ()<UITableViewDelegate, UITableViewDataSource, APIRequestDelegate>
    @property (nonatomic, strong)UIScrollView *scrollView;
    @property (nonatomic, strong)UIView *topView;
    @property (nonatomic, strong)UIView *topBannerView;
    @implementation GoodsDetail1ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT +50)];
        self.scrollView.contentSize = CGSizeMake(0, SCREEN_HEIGHT * 8);
        self.scrollView.delegate = self;
        self.scrollView.bounces = YES;
        [self.view addSubview:self.scrollView];
        self.topView = [[UIView alloc]initWithFrame: CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_WIDTH)];
        self.topView.backgroundColor = [UIColor yellowColor];
        self.topBannerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
        self.topBannerView.backgroundColor = [UIColor whiteColor];
        [self.topView addSubview:self.topBannerView];
        [self.scrollView addSubview:self.topView];
        self.goodsDataTableview1 = [[UITableView alloc]initWithFrame:CGRectMake(0, SCREEN_WIDTH, SCREEN_WIDTH, SCREEN_HEIGHT * 9) style:UITableViewStylePlain];
        self.goodsDataTableview1.backgroundColor = [UIColor colorWithHexColorString:@"ededed"];
        self.goodsDataTableview1.delegate = self;
        self.goodsDataTableview1.dataSource = self;
        self.goodsDataTableview1.bounces = NO;
        self.goodsDataTableview1.scrollEnabled = NO;
        [self.scrollView addSubview:self.goodsDataTableview1];
    }
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        if (scrollView == self.scrollView) {//对其偏移量进行设置。
            CGFloat offsetY = scrollView.contentOffset.y;
            if (offsetY <= 0) {
                CGRect rect = self.topView.frame;
                rect.origin.y = offsetY;
                self.topView.frame = rect;
                rect = self.goodsDataTableview1.frame;
                rect.origin.y = offsetY + SCREEN_WIDTH;
                self.goodsDataTableview1.frame = rect;
                rect = self.topBannerView.frame;
                rect.origin.y = 0;
                self.topBannerView.frame = rect;
            } else  {
                CGRect rect = self.topBannerView.frame;
                rect.origin.y = offsetY / 2;
                self.topBannerView.frame = rect;
            }
    }
    }
    

    以上只是部分代码,提示提供个思路余下的部分还得需要你自己亲自实现。

    参考文档

    http://www.jianshu.com/p/7516eb852cca

    相关文章

      网友评论

        本文标题:iOS仿淘宝详情页,支付宝首页上滑效果

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