加载更多 导航栏渐变的原理


       空闲时间,自己实现了一下刷新和加载更多的库。总结了一下他实现的原理,其实很简单。

       首先,要明白scrollView的几个属性。

       contentOffset  是CGPoint类型   内容偏移量,当前显示的内容的顶点相对此控件顶点的x、y距离,默认为CGPointZero

        contentSize     CGSize 类型    控件内容大小,不一定在显示区域,如果这个属性不设置,此控件无法滚动,默认为CGSizeZero

       UIEdgeInsets     控件四周边距,类似于css中的margin,注意边距不作为其内容的一部分,默认为UIEdgeInsetsZero

     明白了这几个属性 当然还有scrollview的delegate在这就不说了。下面来看加载更多的实现原理。

         

#pragma 滚动视图delegate

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

{

      //y轴的最大偏移量

    CGFloat maxoffsety=self.tableview.contentSize.height-self.tableview.frame.size.height;

    //获取底部加载更多视图的高度

    CGFloat footerviewheight=CGRectGetHeight(self.footerview.frame);

    

    //开始拖拽 y轴的偏移量是要大于maxoff但又不能超出footerview+max的高度

    if (self.tableview.contentOffset.y>maxoffsety&&self.tableview.contentOffset.y<maxoffsety+footerviewheight) {

        //设置 footerstates的状态 FooterViewStatesDraging

    }

    //准备加载

    elseif (self.tableview.contentOffset.y>=maxoffsety+footerviewheight&&self.footerview.footerstates!=FooterViewStatesDraging)

    {

       //设置 footerstates的状态 

    }

    

}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

    //松手加载更多

    if (self.footerview.footerstates==FooterViewStatesReady) {

        //显示出footerview

        [self.tableviewsetContentInset:UIEdgeInsetsMake(0,0, CGRectGetHeight(self.footerview.frame),0)];  

    }

    else

    {

     [self.tableviewsetContentInset:UIEdgeInsetsZero];

    }

}

       在滑动过程中,先去判断y是否超出了最大偏移两,接着滑动到超出做大偏移量与foterview高度之和时,这是设置准备加载中。didscrollview这个方法是你只要滑动他就执行 所以里面的判断也是在一直执行的。

     当你滑动结束的时候,在根据状态去判断就OK了。

     在这的foterview 其实是加载滚动视图的最底部的 是超出屏幕了 所以我们看不见 但他一直都在的 你可以吧视图可视化一下 。要想看见它 去设置滚动视图的ContentInset 这个就可以了

    UITableView *newview=(UITableView *)newSuperview;

    CGRect frame=CGRectMake(0, newview.contentSize.height,CGRectGetWidth(newview.bounds),40);

    [self.stateslabelsetFrame:frame];

   这就是加载更多的简单原理。

    至于导航条的渐变就更简单了

#pragma mark---通过判断tableview滑动的位移 设置导航栏的颜色

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    contentOffsetY = scrollView.contentOffset.y;

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    UIColor *color=kNavigationBarBlueColor;

    CGFloat offset=scrollView.contentOffset.y;      //通过y轴的偏移量来计算百分比 实现它

    if (offset<0) {

        self.navview.backgroundColor=[colorcolorWithAlphaComponent:0];    

    }else {

        CGFloat alpha=1-((128-offset)/128);

        self.navview.backgroundColor=[colorcolorWithAlphaComponent:alpha];

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值