广告轮播器源码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广告轮播器源码相关的知识,希望对你有一定的参考价值。
1.创建容器视图
UIScrollView * scrollView = [[UIScrollView alloc] init];
[self.view addSubview:scrollView];
scrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, 200);
scrollView.backgroundColor = [UIColor yellowColor];
self.scrollView = scrollView;
2.添加内容子视图
for(int i = 0; i < 5; i++)
{
UIImageView * pictImageView = [[UIImageView alloc] init];
[scrollView addSubview:pictImageView];
NSString * name = [NSString stringWithFormat:@"ad_%02d",i];
pictImageView.image = [UIImage imageNamed:name];
设置Frame
CGFloat pictW = scrollView.frame.size.width;
CGFloat pictH = scrollView.frame.size.height;
CGFloat pictX = i * pictW;//i * scrollView.frame.size.width
CGFloat pictY = 0;
pictImageView.frame = CGRectMake(pictX, pictY, pictW, pictH);
}//end for
设置contentSize,只能够横向滚动
scrollView.contentSize = CGSizeMake(5 * scrollView.frame.size.width, 0);
scrollView.showsHorizontalScrollIndicator = NO;
是否支持分页功能
scrollView.pagingEnabled = YES;
指示器,用来提示用户当前显示到的具体页面提示
UIPageControl * pageController = [[UIPageControl alloc] init];
[self.view addSubview:pageController];
pageController.frame = CGRectMake(0, 180, scrollView.frame.size.width, 20);
pageController.backgroundColor = [UIColor redColor];
设置一共有多少个提示视图(小圆点)
pageController.numberOfPages = 5;
当前指示页面的小点颜色
pageController.currentPageIndicatorTintColor = [UIColor greenColor];
其它小点颜色
pageController.pageIndicatorTintColor = [UIColor grayColor];
当前指示第几个小点上
pageController.currentPage = 0;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
1.时时获得当前偏移量
CGFloat offSetX = scrollView.contentOffset.x;
计算出当前滚动到的具体页数
NSInteger currentPage = (offSetX + scrollView.frame.size.width * 0.5 )/ scrollView.frame.size.width;
2.设置pegeControler
self.pageController.currentPage = currentPage;
}
为了防止NSTimer 产生的时间累积效果产生的屏幕视图闪动,我们在人为拖拽的时候,取消自动滚动效果
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
取消timer功能,一旦调用了invalidate 方法之后,timer对象是不能够再从新复活
[self.timer invalidate];
清空一下timer对象
self.timer = nil;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
重新启动timer对象
[self.timer fire]; //调用该方法是无用的,一旦调用了invalidate是不能够再次复活的,只能够重新创建
[self createTimer];
}
- (void)createTimer
{
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(autoScroll) userInfo:nil repeats:YES];
self.timer = timer;
把timer对象加入到循环回路中,NSRunLoopCommonModes通信模式
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
- (void)autoScroll
{
NSLog(@"开始自动滚动了");
/*
scrollView滚动效果,实际上就是改变bounds也就是改变contentOffSet某一个方向的值
当前显示在第几页 *scrollView.width
如果已经显示到最后一页,那么归0
*/
NSInteger currentPage = self.pageController.currentPage >= 4 ? 0 : self.pageController.currentPage + 1;
CGFloat offsetX = currentPage * self.scrollView.frame.size.width;
self.scrollView.contentOffset = CGPointMake(offsetX, 0);
}
以上是关于广告轮播器源码的主要内容,如果未能解决你的问题,请参考以下文章