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