1 // 2 // ViewController.m 3 // 图片轮播器 4 // 5 // Created by zjj on 15/5/23. 6 // Copyright (c) 2015年 zjj. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #define kCount 5 11 @interface ViewController () <UIScrollViewDelegate> 12 @property (nonatomic,strong)UIScrollView *scroView; 13 @property (nonatomic,strong)UIPageControl *pageControl; 14 @property (nonatomic,strong)NSTimer *time; 15 @end 16 17 @implementation ViewController 18 /** 19 开发思路 20 1>建立scrollView 21 2>用UIimageView加载图片 并修改图片的x值 22 3>建立分页控件UIpageControl 23 4>绑定分页圆点点 点击圆点点换下一页 24 5>绑定时钟 25 */ 26 #pragma mark 初始化scrollView 27 - (UIScrollView *)scroView 28 { 29 if (_scroView == nil) { 30 _scroView = [[UIScrollView alloc]initWithFrame:CGRectMake(36, 20, 300, 130)]; 31 _scroView.backgroundColor = [UIColor blueColor]; 32 [self.view addSubview:_scroView]; 33 _scroView.bounces = NO; 34 _scroView.showsHorizontalScrollIndicator = NO; 35 _scroView.showsVerticalScrollIndicator = NO; 36 _scroView.contentSize = CGSizeMake(_scroView.bounds.size.width * kCount, 0); 37 self.scroView.pagingEnabled = YES; 38 _scroView.delegate = self; 39 } 40 return _scroView ; 41 } 42 #pragma mark 初始化PageCOntrol 43 - (UIPageControl *)pageControl 44 { 45 if (_pageControl == nil) { 46 // 分页控件 跟scrollView 是独立的 47 _pageControl = [[UIPageControl alloc]init]; 48 _pageControl.numberOfPages = kCount; 49 CGSize size = [_pageControl sizeForNumberOfPages:kCount]; 50 _pageControl.bounds = CGRectMake(0, 0, size.width, size.height); 51 _pageControl.center = CGPointMake(self.scroView.center.x, self.scroView.center.y+(self.scroView.center.y/2)); 52 _pageControl.pageIndicatorTintColor = [UIColor redColor]; 53 _pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; 54 [self.view addSubview:_pageControl]; 55 self.pageControl = _pageControl; 56 } 57 return _pageControl; 58 } 59 60 - (void)viewDidLoad { 61 [super viewDidLoad]; 62 for (int i = 0; i < kCount; i++) { 63 NSString *icon = [NSString stringWithFormat:@"img_%02d",i + 1]; 64 UIImageView *imgView = [[UIImageView alloc]initWithFrame:self.scroView.bounds]; 65 imgView.image = [UIImage imageNamed:icon]; 66 [self.scroView addSubview:imgView]; 67 } 68 // 添加事件以后执行该块代码从新赋值x值 69 [self.scroView.subviews enumerateObjectsUsingBlock:^(UIImageView *imageView, NSUInteger idx, BOOL *stop) { 70 CGRect frame = imageView.frame; 71 frame.origin.x = idx * frame.size.width; 72 imageView.frame = frame; 73 }]; 74 self.pageControl.currentPage = 0; 75 [self.pageControl addTarget:self action:@selector(pageChange:) forControlEvents:UIControlEventTouchUpInside]; 76 [self start]; 77 } 78 #pragma mark 启动时钟 79 - (void)start 80 { 81 // self.time = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(changeTime) userInfo:nil repeats:YES];// 按住屏幕 画面会中止轮播但 时钟会累积 连跳好几页 82 self.time = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(changeTime) userInfo:nil repeats:YES];// 按住屏幕时钟 画面仍然不会中止轮播 83 [[NSRunLoop currentRunLoop] addTimer:self.time forMode:NSRunLoopCommonModes];// 添加到(运行循环)轮循 84 } 85 86 - (void)changeTime 87 { 88 int page = (self.pageControl.currentPage + 1) % kCount; 89 self.pageControl.currentPage = page; 90 [self pageChange:self.pageControl]; 91 } 92 93 #pragma mark 对scrollView进行操做 根据图片偏移位置计算页数 94 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 95 { 96 // NSLog(@"%@,%f", NSStringFromCGPoint(_scroView.contentOffset),_scroView.bounds.size.width);//取出scrollview中当前页的x 97 int page = _scroView.contentOffset.x / _scroView.bounds.size.width; 98 self.pageControl.currentPage = page; //当前页数 99 } 100 101 - (void)pageChange :(UIPageControl *)page 102 { 103 CGFloat x = page.currentPage * self.scroView.bounds.size.width; 104 [self.scroView setContentOffset:CGPointMake(x, 0)animated:YES]; 105 } 106 #pragma mark 拖动图片时中止时钟 107 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 108 { 109 [self.time invalidate]; 110 } 111 #pragma mark 松手后再次启动时钟 112 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 113 { 114 [self start]; 115 } 116 @end