美文网首页iOS Developer
类似淘宝详情的实现

类似淘宝详情的实现

作者: 皮乐皮儿 | 来源:发表于2017-02-14 17:51 被阅读82次

    淘宝详情是很经典的商品详情模式,今天抽空看了下,以前听别人讲过思路,自己没有亲身实现过,思路很简单:就是在一个父控制器中放入两个子控制器,通过滑动的偏移量去动态改变两个子控制器view的frame(实际上是改变y值)

    好了,废话也不多说,下面就开始看一下具体的实现逻辑吧!

    ps:我在做的过程中写了两种模式,第一种,上半部分是网页,下半部分是原生。第二种,上半部分是原生,下半部分是网页(淘宝的类似于这一种)

    先说第一种,上半部分是网页,下半部分是原生:

    1.首先用两个控制器,一个用来控制原生,一个用来控制网页,项目中为了清晰,用了ThirdViewController 和 FourthViewController分别来作为网页和原生的控制器,在这两个控制器中主要的是滚动方法里面触发改变frame
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        
        CGFloat offset = scrollView.contentOffset.y;
        NSLog(@"offset ======= %.1f",offset);
        if (offset > self.webView.scrollView.contentSize.height - 500) {
            if (self.hideDetail) {
                self.hideDetail();
            }
        }
    }
    

    要拿到网页的高度,根据偏移量和高度的关系去确定触发时机,网页高度的获取可以到获取网页高度中进行查看,或者直接用demo中的方式
    触发block块之后,在父控制器中进行子控制器view frame的改变

    __weak typeof(self) weakSelf = self;    
        self.thirdVc.hideDetail = ^ {
            [UIView animateWithDuration:0.5 animations:^{
                weakSelf.thirdVc.view.frame = CGRectMake(0, - weakSelf.view.frame.size.height, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
                weakSelf.fourthVc.view.frame = CGRectMake(0, 0, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
                
            } completion:^(BOOL finished) {
                
            }];
        };
    
    
    2.同样的,在原生控制器中也是如此
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        
        CGFloat offset = scrollView.contentOffset.y;
        NSLog(@"offset == %.1f",offset);
        if (offset < -100) {
            if (self.ShowDetail) {
                self.ShowDetail();
            }
        }
    }
    
    __weak typeof(self) weakSelf = self;
        self.fourthVc.ShowDetail = ^ {
            [UIView animateWithDuration:0.5 animations:^{
                weakSelf.thirdVc.view.frame = CGRectMake(0, 0, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
                weakSelf.fourthVc.view.frame = CGRectMake(0, weakSelf.view.frame.size.height, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
                
            } completion:^(BOOL finished) {
                
            }];
        };
    

    demo中的细节点没有调整,具体的用到时候根据自己的情况进行微调即可

    下面看类似淘宝的情况

    1. 原生控制器及其frame改变
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
        CGFloat offset = scrollView.contentOffset.y;
        NSLog(@"offset == %.1f",offset);
        if (offset> 250) {
            if (self.ShowDetail) {
                self.ShowDetail();
            }
        }
    }
    
    
        __weak typeof(self) weakSelf = self;
        self.firstVc.ShowDetail = ^ {
            [UIView animateWithDuration:0.5 animations:^{
                weakSelf.firstVc.view.frame = CGRectMake(0, - weakSelf.view.frame.size.height, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
                weakSelf.secondVc.view.frame = CGRectMake(0, 0, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
                
            } completion:^(BOOL finished) {
                
            }];
        };
    
    
    2. 网页控制器及其frame
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
       CGFloat offset = scrollView.contentOffset.y;
       if (offset < -100) {
           if (self.hideDetail) {
               self.hideDetail();
           }
       }
    }
    
    __weak typeof(self) weakSelf = self;    
       self.secondVc.hideDetail = ^ {
           [UIView animateWithDuration:0.5 animations:^{
               weakSelf.firstVc.view.frame = CGRectMake(0, 0, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
               weakSelf.secondVc.view.frame = CGRectMake(0, weakSelf.view.frame.size.height, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height);
               
           } completion:^(BOOL finished) {
               
           }];
       };
    

    ps:具体也就这些,demo写的比较简单,具体情况需要具体分析,如果有更好的方法,欢迎沟通学习

    demo下载地址

    相关文章

      网友评论

        本文标题:类似淘宝详情的实现

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