scrollView无限滚动,横屏和竖屏

来源:互联网 发布:学校晚上网络监控 编辑:程序博客网 时间:2024/06/03 15:58

图片无限滚动原理:
在可见的窗口外左右各创建一个复用的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 0
原创粉丝点击