scrollView无限滚动,横屏和竖屏

图片无限滚动原理:
在可见的窗口外左右各创建一个复用的imageView。
假设每个imageView宽度是width1,每当滚屏的偏移量>=width1 或者 <=0时,刷新所有的imageView即可。
几个处理的关键点是:

1、滚屏的处理

//滚屏滚动时的代理
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{

}
//滚屏开始拖拽时的代理,在这里面需要停止定时器
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{

}
//滚屏停止拖拽时的代理,在这里需要开始定时器
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{

}
//与上一个方法类似,也要开始定时器。这两个方法区别是 :上边一个方法如果我手指离开滚屏,同时滚屏也停止滑动了,就会执行上边的方法
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{

}

2、滚屏上imageView的数据源处理

//处理滚屏上的imageView ,dir:0:左或下,1:右或上
-(void)dealWithCurrentImageViewWithDirection:(BOOL)dir
{
    if(!_isOneScrDealFinish) return;
    NSString *needInsertStr = nil;
    NSInteger index = 0;
    NSArray *currentArr = self.imageArr.count?self.imageArr:self.gropuUrlArr;
    if(dir){//向右、下滑
        [self.currentImageArr removeLastObject];
        NSString *firstStr = self.currentImageArr.firstObject;
        index = [currentArr indexOfObject:firstStr];
        if(index==0){
            needInsertStr = currentArr.lastObject;
        }
        else
            needInsertStr = currentArr[index-1];
        [self.currentImageArr insertObject:needInsertStr atIndex:0];
        //设置pageControll
        if(_pageControl.hidden == NO){
            NSInteger curIndex = _pageControl.currentPage - 1;
            if(curIndex < 0)
                _pageControl.currentPage = _pageControl.numberOfPages-1;
            else
                _pageControl.currentPage = curIndex;
        }
    }
    else{//左、上滑
        [self.currentImageArr removeObjectAtIndex:0];
        NSString *lastStr = self.currentImageArr.lastObject;
        index = [currentArr indexOfObject:lastStr];
        if(index == currentArr.count-1){
            needInsertStr = currentArr.firstObject;
        }
        else
            needInsertStr = currentArr[index+1];
        [self.currentImageArr addObject:needInsertStr];
        //设置pageControll
        if(_pageControl.hidden == NO){
            NSInteger curIndex = _pageControl.currentPage + 1;
            if(curIndex > _pageControl.numberOfPages-1)
                _pageControl.currentPage = 0;
            else
                _pageControl.currentPage = curIndex;

        }
    }
    BOOL isUrl = (self.imageArr.count == 0);
    for(NSInteger i=0;i<self.currentImageArr.count;i++){
        UIImageView *imageView = self.contentImageViewArr[i];
        NSString *str = self.currentImageArr[i];
        if(isUrl){
            [imageView sd_setImageWithURL:[NSURL URLWithString:str] placeholderImage:[UIImage imageNamed:_defaultImageStr]];
        }
        else{
            imageView.image = [UIImage imageNamed:str];
        }
    }
    //将scrollView归位
    if(_scrDirection == scr_horizonDirection)
        self.mainScr.contentOffset = CGPointMake(_avgWidth, 0);
    else
        self.mainScr.contentOffset = CGPointMake(0, _avgHeight);
    _isOneScrDealFinish = 1;
}

github下载地址:https://github.com/JbWang-CN/scrollView.git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值