前几天面试有面试官问我关于scrollView自动轮播的实现,下面就用代码给大家一起分享一下(不足之处还望多多指出):
#define kWith self.view.bounds.size.width
#define kHeight self.view.bounds.size.height
@interface ViewController ()<UIScrollViewDelegate>
@property (nonatomic,retain)UIPageControl *pageControl;
@property (nonatomic,strong)NSTimer *timer;
@property (nonatomic,assign) BOOL isDragging;
@property (nonatomic,strong)UIScrollView *scroll;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIScrollView *scroll = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
scroll.backgroundColor = [UIColor redColor];
scroll.contentSize = CGSizeMake( kWith*6, 0);
//设置边界是否反弹
scroll.bounces = NO;
scroll.pagingEnabled = YES;
scroll.showsHorizontalScrollIndicator = NO;
scroll.contentOffset = CGPointMake(kWith, 0);
[self.view addSubview:scroll];
//创建要显示的图片
for (NSInteger i = 0; i < 4; i ++) {
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(kWith*(i+ 1), 0, kWith, kHeight)];
imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%ld.jpg",i + 1]];
scroll.delegate = self;
[scroll addSubview:imageView];
}
//左右各放一张图片,第一个imageView放最后一张图片,最后一个imageView放第一张图片
//在最左边添加一张图片
UIImageView *firstImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kWith, kHeight)];
firstImageView.image = [UIImage imageNamed:@"4.jpg"];
[scroll addSubview:firstImageView];
//在最右边添加一张图片
UIImageView *lastImageView = [[UIImageView alloc]initWithFrame:CGRectMake(kWith *5, 0, kWith, kHeight)];
lastImageView.image = [UIImage imageNamed:@"1.jpg"];
[scroll addSubview:lastImageView];
//创建pageControl
UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, kHeight - 100, kWith, 40)];
pageControl.currentPageIndicatorTintColor = [UIColor greenColor];
pageControl.pageIndicatorTintColor = [UIColor redColor];
pageControl.numberOfPages = 4;
[self.view addSubview:pageControl];
self.pageControl = pageControl;
self.scroll = scroll;
//创建定时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(update:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];
}
//实现定时器方法
- (void)update:(NSTimer*)timer {
[self.scroll setContentOffset:CGPointMake(self.scroll.contentOffset.x + kWith, 0) animated:YES];
NSInteger index = self.scroll.contentOffset.x/kWith;
self.pageControl.currentPage = index;
if (index == 5) {
[self.scroll setContentOffset:CGPointMake(kWith, 0) animated:NO];
self.pageControl.currentPage = 0;
}else if (index == 0) {
[self.scroll setContentOffset:CGPointMake(kWith *4, 0) animated:NO];
self.pageControl.currentPage = 3;
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
//接收当前所停止的图片是第几张
NSInteger index = scrollView.contentOffset.x/kWith;
//与当前的pageControl进行关联
self.pageControl.currentPage = index - 1;
//判断如果index = 5,证明是第一张图片,currentPage就是0
if (index == 5) {
[scrollView setContentOffset:CGPointMake(kWith, 0) animated:NO];
self.pageControl.currentPage = 0;
}else if (index == 0) {
//如果index = 0,证明是最后一张图片,currentPage就是3(从0开始)
[scrollView setContentOffset:CGPointMake(kWith *4, 0) animated:NO];
self.pageControl.currentPage = 3;
}
}