樓主項目中需要有一個輪播圖,因為比較簡單,就自己寫了個,因為是從網上弄得圖片 所以用了SDWebImage 這個三方庫 當然自己也可以去掉
類型后面有*號 如用使用 請自行加上。。。。。
代碼:.h 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@protocol TJXViewDelegate<NSObject> //判斷點擊的那個 -( void )sendImageName:(TJXView *)TJXView andName:(NSInteger)selectImage; @end @interface TJXView : UIView @property (nonatomic,weak)id<TJXViewDelegate>delegate; //傳一個frame 和 裝有圖片名字的數組過來 //參數一:frame //參數二:裝有圖片名字的數組 //參數三:BOOL如果是YES,那么自動滾動,如果是NO不滾動 -(id)initWithFrame:(CGRect)frame andImageNameArray: (NSMutableArray * )imageNameArray andIsRunning:( BOOL )isRunning; @end |
.m文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
@interface TJXView()<UIScrollViewDelegate> { NSInteger _currentPage; //記錄真實的頁碼數 NSTimer *_timer; //生命一個全局變量 } @property (nonatomic,assign) BOOL isRun; @property (nonatomic,strong) NSMutableArray *imageArray; //存儲圖片的名字 @property (nonatomic,strong) UIScrollView *scrollView; @property (nonatomic,strong) UIPageControl *pageControl; @property (nonatomic,assign) CGFloat width; //view的寬 @property (nonatomic,assign) CGFloat height; //view的高 @end -(id)initWithFrame:(CGRect)frame andImageNameArray:(NSMutableArray *)imageNameArray andIsRunning:( BOOL )isRunning{ self = [super initWithFrame:frame]; if (self) { _width = self.frame.size.width; _height = self.frame.size.height; //arrayWithArray 把數組中的內容放到一個數組中返回 self.imageArray = [NSMutableArray arrayWithArray:imageNameArray]; //在數組的尾部添加原數組第一個元素 [self.imageArray addObject:[imageNameArray firstObject]]; //在數組的首部添加原數組最后一個元素 [self.imageArray insertObject:[imageNameArray lastObject] atIndex:0]; self.isRun = isRunning; _currentPage = 0; [self createSro]; [self createPageControl]; [self createTimer]; } return self; } -( void )createTimer{ if (_isRun == YES) { _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(change) userInfo:nil repeats:YES ]; [[NSRunLoop currentRunLoop]addTimer:_timer forMode:NSRunLoopCommonModes]; } } -( void )change{ //1獲得當前的點 CGPoint point = _scrollView.contentOffset; //2求得將要變換的點 CGPoint endPoint = CGPointMake(point.x+_width, 0); //判斷 if (endPoint.x == (self.imageArray.count-1)*_width) { [UIView animateWithDuration:0.25 animations:^{ _scrollView.contentOffset = CGPointMake(endPoint.x, 0); } completion:^( BOOL finished) { //動畫完成的block _scrollView.contentOffset = CGPointMake(_width, 0); CGPoint realEnd = _scrollView.contentOffset; //取一遍頁碼數 _currentPage = realEnd.x/_width; _pageControl.currentPage = _currentPage-1; }]; } else { //0.25s中更改一個圖片 [UIView animateWithDuration:0.25 animations:^{ _scrollView.contentOffset = endPoint; } completion:^( BOOL finished) { }]; CGPoint realEnd = _scrollView.contentOffset; //取一遍頁碼數 _currentPage = realEnd.x/_width; _pageControl.currentPage = _currentPage-1; } } //創建頁碼指示器 -( void )createPageControl{ _pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(_width-200, _height-30, 100, 30)]; _pageControl.centerX = _width/2; _pageControl.numberOfPages = self.imageArray.count-2; _pageControl.pageIndicatorTintColor = WP_GRAY_COLOR; _pageControl.currentPageIndicatorTintColor = [UIColor whiteColor]; _pageControl.userInteractionEnabled = NO; [self addSubview:_pageControl]; } //創建滾動視圖 -( void )createSro{ _scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, _width, _height)]; _scrollView.contentSize = CGSizeMake(_width*self.imageArray.count, _height); for ( int i = 0; i < self.imageArray.count; i++) { UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(i*_width, 0, _width, _height)]; // imageView.image = [UIImage imageNamed:self.imageArray[i]]; [imageView sd_setImageWithURL:self.imageArray[i] placeholderImage:[UIImage imageNamed:@ "home_banner_blank" ]]; imageView.userInteractionEnabled = YES; imageView.tag = 200+i; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; [imageView addGestureRecognizer:tap]; [_scrollView addSubview:imageView]; } //水平指示條不顯示 _scrollView.showsHorizontalScrollIndicator = NO; //關閉彈簧效果 _scrollView.bounces = NO; //設置用戶看到第一張 _scrollView.contentOffset = CGPointMake(_width, 0); //設置代理 _scrollView.delegate = self; //分頁效果 _scrollView.pagingEnabled = YES; [self addSubview:_scrollView]; } -( void )tap:(UITapGestureRecognizer *)tap{ if (_delegate&&[_delegate respondsToSelector:@selector(sendImageName:andName:)]){ [_delegate sendImageName:self andName:tap.view.tag-201]; } else { NSLog(@ "沒有設置代理或者沒有事先協議的方法" ); } } #pragma mark UIScrollViewDelegate //停止滾動 -( void )scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ if (_timer) { [_timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:2]]; } //圖片的個數 1 2 3 4 5 6 7 8 //真實的頁碼 0 1 2 3 4 5 6 7 //顯示的頁碼 0 1 2 3 4 5 CGPoint point = _scrollView.contentOffset; if (point.x == (self.imageArray.count-1)*_width) { scrollView.contentOffset = CGPointMake(_width, 0); } if (point.x == 0) { scrollView.contentOffset = CGPointMake((self.imageArray.count-2)*_width, 0); } //取一遍頁碼數 CGPoint endPoint = scrollView.contentOffset; _currentPage = endPoint.x/_width; _pageControl.currentPage = _currentPage-1; } //手指開始觸摸的時候,停止計時器 -( void )scrollViewWillBeginDragging:(UIScrollView *)scrollView{ if (_timer) { //如果有,停掉 [_timer setFireDate:[NSDate distantFuture]]; } } |
在項目中 導入頭文件 遵守代理
1
2
3
4
5
6
7
|
TJXView * TJXView = [[TJXView alloc]initWithFrame:CGRectMake(0, 0, WPSCREEN_WIDTH, 100*WPSCREEN_HIGTH_RATIO) andImageNameArray:self.bannerImager andIsRunning:YES]; TJXView.delegate = self; [self.view addSubview: TJXView]; #pragma mark TJXViewDelegate -( void )sendImageName:(TJXView *) TJXView andName:(NSInteger)selectImage{ KKLog(@ "%ld" ,( long )selectImage); } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.jianshu.com/p/87bf767f8c4e