iOS图片的循环滑动
来源:互联网 发布:java specification 编辑:程序博客网 时间:2024/05/10 23:15
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];}
如若代码中出现错误,欢迎指出。
0 0
- iOS图片的循环滑动
- 循环滑动图片
- ios UIScrollView 循环滑动
- ios UIScrollView 循环滑动
- ios UIScrollView 循环滑动
- ios ----UIScrollview循环滑动
- ios UIScrollView 循环滑动
- UIScrollView(滑动切换图片,图片的循环切换(自动))
- 循环滑动视图uisctrollview滑动图片
- ViewPager 实现左右循环滑动图片的两种方法
- viewpager的循环滑动和图片轮播
- 【实训】自动横向循环滑动图片控件的实现
- 滑动视图的循环滑动
- iOS 开发中滑动视图的循环播放
- ViewPager的循环滑动
- ViewPager的循环滑动
- iOS-循环图片播放
- 使用ViewPager实现左右循环滑动图片
- 93格式条码打印到屏幕上可以扫出来,但是打印到打印机扫不来的的问题
- 黑马程序员-String和正则表达式
- LeetCode 题解(257) : Word Pattern
- 级联分级器目标检测objdect(人脸和人眼的检测)
- pm8916电源管理调试
- iOS图片的循环滑动
- Http之Auth的那些事
- Error generating shape from text: Invalid text used to construct geometry (-1)
- iOS开发之UITabBarController
- 深入解读Quartz的原理
- 非常有用的图像过滤器工具
- VM Ubuntu14.10安装JDK1.8
- 删除微软输入新体验 2010
- struts中文乱码问题