iOS之UIScrollView循环滚动

  1 #import "ViewController.h"
  2 
  3  
  4 
  5 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
  6 
  7 #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
  8 
  9 #define IMAGEVIEW_COUNT 3
 10 
 11  
 12 
 13 @interface ViewController () <UIScrollViewDelegate> {
 14 
 15     UIScrollView *_scrollView;
 16 
 17     UIImageView *_leftImageView;
 18 
 19     UIImageView *_centerImageView;
 20 
 21     UIImageView *_rightImageView;
 22 
 23     UIPageControl *_pageControl;
 24 
 25     UILabel *_label;
 26 
 27     NSMutableDictionary *_imageData;//图片数据
 28 
 29     int _currentImageIndex;//当前图片索引
 30 
 31     int _imageCount;//图片总数
 32 
 33 }
 34 
 35  
 36 
 37 @end
 38 
 39  
 40 
 41 @implementation ViewController
 42 
 43  
 44 
 45 - (void)viewDidLoad {
 46 
 47     [super viewDidLoad];
 48 
 49     //加载数据
 50 
 51     [self loadImageData];
 52 
 53     //添加滚动控件
 54 
 55     [self addScrollView];
 56 
 57     //添加图片控件
 58 
 59     [self addImageViews];
 60 
 61     //添加分页控件
 62 
 63     [self addPageControl];
 64 
 65     //添加图片信息描述控件
 66 
 67     [self addLabel];
 68 
 69     //加载默认图片
 70 
 71     [self setDefaultImage];
 72 
 73 }
 74 
 75 #pragma mark 加载图片数据
 76 
 77 -(void)loadImageData {
 78 
 79     //读取程序包路径中的资源文件
 80 
 81     NSString *path = [[NSBundle mainBundle] pathForResource:@"imageInfo" ofType:@"plist"];
 82 
 83     _imageData = [NSMutableDictionary dictionaryWithContentsOfFile:path];
 84 
 85     _imageCount = (int)_imageData.count;
 86 
 87 }
 88 
 89  
 90 
 91 #pragma mark 添加控件
 92 
 93 -(void)addScrollView {
 94 
 95 //    _scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
 96 
 97     _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20+20, SCREEN_WIDTH, 200)];
 98 
 99     _scrollView.backgroundColor = [UIColor lightGrayColor];
100 
101     //设置代理
102 
103     _scrollView.delegate = self;
104 
105     //设置滚动范围
106 
107     _scrollView.contentSize = CGSizeMake(IMAGEVIEW_COUNT*SCREEN_WIDTH, 0);
108 
109     //设置当前显示的位置为中间图片(设置scrollView偏移量)
110 
111     [_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0)];
112 
113     //设置分页
114 
115     _scrollView.pagingEnabled = YES;
116 
117     //隐藏水平条 竖向条
118 
119     _scrollView.showsHorizontalScrollIndicator = NO;
120 
121     _scrollView.showsVerticalScrollIndicator = NO;
122 
123     //关闭弹簧效果
124 
125 //    _scrollView.bounces = NO;
126 
127     [self.view addSubview:_scrollView];
128 
129 }
130 
131  
132 
133 #pragma mark 添加图片三个控件
134 
135 -(void)addImageViews {
136 
137     _leftImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];
138 
139     //会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白
140 
141     _leftImageView.contentMode=UIViewContentModeScaleAspectFit;
142 
143     [_scrollView addSubview:_leftImageView];
144 
145     
146 
147     _centerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];
148 
149     _centerImageView.contentMode = UIViewContentModeScaleAspectFit;
150 
151     [_scrollView addSubview:_centerImageView];
152 
153     
154 
155     _rightImageView = [[UIImageView alloc] initWithFrame:CGRectMake(2*SCREEN_WIDTH, 0, SCREEN_WIDTH, _scrollView.frame.size.height)];
156 
157     _rightImageView.contentMode = UIViewContentModeScaleAspectFit;
158 
159     [_scrollView addSubview:_rightImageView];
160 
161 }
162 
163 #pragma mark 设置默认显示图片
164 
165 -(void)setDefaultImage {
166 
167     //加载默认图片
168 
169     _leftImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",_imageCount-1]];
170 
171     _centerImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",0]];
172 
173     _rightImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",1]];
174 
175     _currentImageIndex = 0;
176 
177     //设置当前页
178 
179     _pageControl.currentPage = _currentImageIndex;
180 
181     NSString *imageName = [NSString stringWithFormat:@"%i.jpeg",_currentImageIndex];
182 
183     _label.text = _imageData[imageName];
184 
185 }
186 
187  
188 
189 #pragma mark 添加分页控件
190 
191 -(void)addPageControl {
192 
193     _pageControl = [[UIPageControl alloc] init];
194 
195 //    _pageControl.backgroundColor = [UIColor orangeColor];
196 
197     //注意此方法可以根据页数返回UIPageControl合适的大小
198 
199     CGSize size = [_pageControl sizeForNumberOfPages:_imageCount];
200 
201     _pageControl.bounds = CGRectMake(0, 0, size.width, size.height);
202 
203     _pageControl.center = CGPointMake(SCREEN_WIDTH*2/3, _scrollView.frame.origin.y+_scrollView.frame.size.height-10);
204 
205     //设置颜色
206 
207     _pageControl.pageIndicatorTintColor = [UIColor colorWithRed:193/255.0 green:219/255.0 blue:249/255.0 alpha:1];
208 
209     //设置当前页颜色
210 
211     _pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0 green:150/255.0 blue:1 alpha:1];
212 
213     //设置总页数
214 
215     _pageControl.numberOfPages = _imageCount;
216 
217     [self.view addSubview:_pageControl];
218 
219 }
220 
221  
222 
223 #pragma mark 添加信息描述控件
224 
225 -(void)addLabel {
226 
227     _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, SCREEN_WIDTH, 20)];
228 
229 //    _label.backgroundColor = [UIColor orangeColor];
230 
231     _label.textAlignment = NSTextAlignmentCenter;
232 
233     _label.textColor = [UIColor colorWithRed:0 green:150/255.0 blue:1 alpha:1];
234 
235     [self.view addSubview:_label];
236 
237 }
238 
239  
240 
241 #pragma mark 滚动停止事件
242 
243 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
244 
245     //重新加载图片
246 
247     [self reloadImage];
248 
249     //移动到中间
250 
251     [_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0)];
252 
253     //设置分页
254 
255     _pageControl.currentPage = _currentImageIndex;
256 
257     //设置描述
258 
259     NSString *imageName = [NSString stringWithFormat:@"%i.jpeg",_currentImageIndex];
260 
261     _label.text = _imageData[imageName];
262 
263 }
264 
265  
266 
267 #pragma mark 重新加载图片
268 
269 -(void)reloadImage {
270 
271     int leftImageIndex,rightImageIndex;
272 
273     CGPoint offset = [_scrollView contentOffset];
274 
275     if (offset.x > SCREEN_WIDTH) { //向右滑动
276 
277         _currentImageIndex = (_currentImageIndex+1)%_imageCount;
278 
279     }else if(offset.x < SCREEN_WIDTH) { //向左滑动
280 
281         _currentImageIndex = (_currentImageIndex+_imageCount-1)%_imageCount;
282 
283     }
284 
285     _centerImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",_currentImageIndex]];
286 
287     
288 
289     //重新设置左右图片
290 
291     leftImageIndex = (_currentImageIndex+_imageCount-1)%_imageCount;
292 
293     rightImageIndex = (_currentImageIndex+1)%_imageCount;
294 
295     _leftImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",leftImageIndex]];
296 
297     _rightImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpeg",rightImageIndex]];
298 
299 }
300 
301 @end
302 
303  

 

posted @ 2016-02-25 14:15  Jaycee麦子  阅读(506)  评论(0编辑  收藏  举报