首页 > 代码库 > iOS轮播图的实现
iOS轮播图的实现
//使用轮播图展示一组图片信息
//定时器 使循环
[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
//初始化scrollview
self.scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, 320, 200)];
self.scrollview.bounces = YES;
self.scrollview.pagingEnabled = YES;
self.scrollview.delegate = self;
self.scrollview.userInteractionEnabled = YES;
self.scrollview.showsHorizontalScrollIndicator = NO;
self.scrollview.showsVerticalScrollIndicator = NO;
[self.homeView addSubview:self.scrollview];
//初始化存放循环图片的数组
self.slideImages = [NSMutableArray array];
[self.slideImages addObject:@"1.jpg"];
[self.slideImages addObject:@"2.jpg"];
[self.slideImages addObject:@"3.jpg"];
[self.slideImages addObject:@"4.jpg"];
//初始化pageControl
self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(110,240.0,100.0,18.0)]; // 初始化mypagecontrol
[self.pageControl setCurrentPageIndicatorTintColor:[UIColor redColor]];
[self.pageControl setPageIndicatorTintColor:[UIColor blackColor]];
self.pageControl.numberOfPages = [self.slideImages count];
self.pageControl.currentPage = 0;
[self.pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventValueChanged]; // 触摸mypagecontrol触发change这个方法事件
[self.homeView addSubview:self.pageControl];
// 创建四个图片 imageviewm,
for (int i = 0;i<[self.slideImages count];i++)
{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.slideImages objectAtIndex:i]]];
imageView.frame = CGRectMake((320 * i) + 320, 0, 320, 190.0);
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didClickTapGesture:)];
imageView.tag = i + 100;
imageView.userInteractionEnabled = YES;
[imageView addGestureRecognizer:tapGesture];
[self.scrollview addSubview:imageView]; // 首页是第0页,默认从第1页开始的。所以+320。。。
}
// 取数组最后一张图片 放在第0页
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.slideImages objectAtIndex:([self.slideImages count]-1)]]];
imageView.frame = CGRectMake(0, 0, 320, 190.0); // 添加最后1页在首页 循环
[self.scrollview addSubview:imageView];
// 取数组第一张图片 放在最后1页
imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.slideImages objectAtIndex:0]]];
imageView.frame = CGRectMake((320 * ([self.slideImages count] + 1)) , 0, 320, 190.0); // 添加第1页在最后 循环
[self.scrollview addSubview:imageView];
[self.scrollview setContentSize:CGSizeMake(320 * ([self.slideImages count] + 2), 190.0
)]; // +上第1页和第4页 原理:4-[1-2-3-4]-1
[self.scrollview setContentOffset:CGPointMake(0, 0)];
[self.scrollview scrollRectToVisible:CGRectMake(320,64,320,190.0) animated:NO]; // 默认从序号1位置放第1页 ,序号0位置位置放第4页
#pragma -------------------------------轮播图-----------------------------------------
// scrollview 委托函数
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
CGFloat pagewidth = self.scrollview.frame.size.width;
int page = floor((self.scrollview.contentOffset.x - pagewidth/([self.slideImages count]+2))/pagewidth)+1;
page --; // 默认从第二页开始
self.pageControl.currentPage = page;
}
// scrollview 委托函数
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat pagewidth = self.scrollview.frame.size.width;
int currentPage = floor((self.scrollview.contentOffset.x - pagewidth/ ([self.slideImages count]+2)) / pagewidth) + 1;
// int currentPage_ = (int)self.scrollView.contentOffset.x/320; // 和上面两行效果一样
// NSLog(@"currentPage_==%d",currentPage_);
if (currentPage==0)
{
[self.scrollview scrollRectToVisible:CGRectMake(320 * [self.slideImages count],64,320,190.0) animated:NO]; // 序号0 最后1页
}
else if (currentPage==([self.slideImages count]+1))
{
[self.scrollview scrollRectToVisible:CGRectMake(320,0,320,190.0) animated:NO]; // 最后+1,循环第1页
}
}
// pagecontrol 选择器的方法
- (void)turnPage
{
int page = self.pageControl.currentPage; // 获取当前的page
[self.scrollview scrollRectToVisible:CGRectMake(320*(page+1),0,320,190.0) animated:NO]; // 触摸pagecontroller那个点点 往后翻一页 +1
}
// 定时器 绑定的方法
- (void)runTimePage
{
int page = self.pageControl.currentPage; // 获取当前的page
page++;
page = page > 3 ? 0 : page ;
self.pageControl.currentPage = page;
[self turnPage];
}
//图片手势
- (void)didClickTapGesture:(UITapGestureRecognizer *)gesture
{
UIImageView * imageView = nil;
switch (gesture.view.tag) {
case 101:
imageView = (UIImageView *)[self.scrollview viewWithTag:101];
break;
case 102:
imageView = (UIImageView *)[self.scrollview viewWithTag:102];
break;
case 103:
imageView = (UIImageView *)[self.scrollview viewWithTag:103];
break;
default:
break;
}
}
iOS轮播图的实现