iOS图片的循环滑动
使用计时器,scrollView,pageControl完成图片的自动,手动循环滑动
该代码块中用到的图片直接使用的第三方SDWebImage异步加载网络图片,如有需要,可直接换成本地图片
.h文件
@interface MyScrollViewOnView : UIView<UIScrollViewDelegate>
{
UIScrollView *_scrollView;
UIPageControl *_pageControl;
NSTimer *_timer;
}
@property (nonatomic, strong) NSArray *imgArr;
.m文件
#import "MyScrollViewOnView.h"
@implementation MyScrollViewOnView
- (void)_initView
{
//初始化scrollView
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
_scrollView.delegate = self;
_scrollView.pagingEnabled = YES;
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.showsVerticalScrollIndicator = NO;
//创建scrollView上的imageView
UIImageView *firstImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, _scrollView.width, _scrollView.height)];
//加载url图片,将第一个imgView显示最后一张图片
/*
如果是本地图片则使用
firstImgView.image = [UIImage imageNamed:@"001.png"];
*/
[firstImgView sd_setImageWithURL:[NSURL URLWithString:[self.imgArr lastObject]]];
[_scrollView addSubview:firstImgView];
//创建数组中的图片用imgView显示出来
for (int i = 0; i < self.imgArr.count; i++) {
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(_scrollView.width * (i + 1), 0, _scrollView.width, _scrollView.height)];
[imgView sd_setImageWithURL:[NSURL URLWithString:self.imgArr[i]]];
[_scrollView addSubview:imgView];
}
//创建最后一个imgView,显示的是第一张图片
UIImageView *lastImgView = [[UIImageView alloc] initWithFrame:CGRectMake(_scrollView.width * (self.imgArr.count + 1), 0, _scrollView.width, _scrollView.height)];
[lastImgView sd_setImageWithURL:[NSURL URLWithString:self.imgArr[0]]];
[_scrollView addSubview:lastImgView];
//设置内容视图
_scrollView.contentSize = CGSizeMake(_scrollView.width * (self.imgArr.count + 2), _scrollView.height);
[self addSubview:_scrollView];
//从第2个imgView开始,但是显示的图片是第一张
[_scrollView scrollRectToVisible:CGRectMake(_scrollView.width, 0, _scrollView.width, _scrollView.height) animated:NO];
//设置pageControl
_pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, _scrollView.height - 20, _scrollView.width, 20)];
_pageControl.userInteractionEnabled = NO;
_pageControl.numberOfPages = self.imgArr.count;
_pageControl.currentPage = 0;
// _pageControl.backgroundColor = [UIColor redColor];
[self addSubview:_pageControl];
//设置计时器
_timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
}
- (void)timerAction:(NSTimer *)timer
{
[_scrollView setContentOffset:CGPointMake(_scrollView.contentOffset.x + _scrollView.width, _scrollView.contentOffset.y) animated:YES];
//计算出当前的页数
NSInteger currentPage = floor((_scrollView.contentOffset.x - _scrollView.width / 2) / _scrollView.width) + 1;
_pageControl.currentPage = currentPage;
if (currentPage == self.imgArr.count) {
currentPage = 0;
}
}
- (void)setImgArr:(NSArray *)imgArr
{
if (_imgArr != imgArr) {
_imgArr = imgArr;
[self _initView];
}
}
#pragma mark-----UIScrollViewDelegate
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
[self scrollViewDidEndDecelerating:_scrollView];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// isDeceleration = NO;
//计算出当前的页数
NSInteger currentPage = floor((_scrollView.contentOffset.x - _scrollView.width / 2) / _scrollView.width) + 1;
if (currentPage == 0) {
//滑到第一个imgView,显示的是最后一张图片(往右划的情况)
[_scrollView scrollRectToVisible:CGRectMake(_scrollView.width * self.imgArr.count, 0, _scrollView.width, _scrollView.height) animated:NO];
_pageControl.currentPage = self.imgArr.count - 1;
NSLog(@"显示的是最后一张图片,倒数第二个imgView");
return;
}else if (currentPage == self.imgArr.count + 1){
//滑到了最后一张,但是显示的是第一张图片(往左划的情况)
[_scrollView scrollRectToVisible:CGRectMake(_scrollView.width, 0, _scrollView.width, _scrollView.height) animated:NO];
_pageControl.currentPage = 0;
NSLog(@"显示的是第一张图片,第二个imgView");
return;
}
_pageControl.currentPage = currentPage - 1;
// NSLog(@"current page-------%ld", _pageControl.currentPage);
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[_timer invalidate];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
_timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
}
如若代码中出现错误,欢迎指出。