十一岁的加重songxing10000…… ------ 回到博主首页

无限循环图片浏览器

 1     UIScrollView无限滚动
 2 
 3 #import "ViewController.h"
 4 
 5 #define kCount 8
 6 
 7 @interface ViewController () <UIScrollViewDelegate>
 8 {
 9     UIImageView *_reusableView; // 循环利用的
10     UIImageView *_centerView; // 中间的
11 }
12 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
13 @end
14 
15 @implementation NJViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20     
21     CGFloat w = _scrollView.frame.size.width;
22     NSLog(@"%f",w);
23     CGFloat h = _scrollView.frame.size.height;
24     _scrollView.pagingEnabled = YES;
25     _scrollView.contentSize = CGSizeMake(w * 3, 0);
26     _scrollView.contentOffset = CGPointMake(w, 0);
27     _scrollView.showsHorizontalScrollIndicator = NO;
28     
29     _centerView = [[UIImageView alloc] init];
30     _centerView.image = [UIImage imageNamed:@"00.jpg"];
31     _centerView.frame = CGRectMake(w, 0, w, h);
32     _centerView.tag = 0;
33     [_scrollView addSubview:_centerView];
34     
35     _reusableView = [[UIImageView alloc] init];
36     _reusableView.frame = _scrollView.bounds;
37 }
38 
39 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
40 {
41     CGFloat offsetX = scrollView.contentOffset.x;
42     CGFloat w = scrollView.frame.size.width;
43     NSLog(@"offsetX = %f and _centerView.frame.origin.x = %f",offsetX,_centerView.frame.origin.x);
44     // 1.设置 循环利用view 的位置
45     CGRect f = _reusableView.frame;
46     int index = 0;
47     if (offsetX > _centerView.frame.origin.x) { // 显示在最右边
48         NSLog(@"scrollView.contentSize.width = %f",scrollView.contentSize.width);
49         f.origin.x = scrollView.contentSize.width - w;
50         
51         index = _centerView.tag + 1;
52         if (index >= kCount) index = 0;
53     } else { // 显示在最左边
54         f.origin.x = 0;
55         
56         index = _centerView.tag - 1;
57         if (index < 0) index = kCount - 1;
58     }
59     _reusableView.frame = f;
60     _reusableView.tag = index;
61     NSString *icon = [NSString stringWithFormat:@"0%d.jpg", index];
62     _reusableView.image = [UIImage imageNamed:icon];
63     
64     // 2.显示了 最左 或者 最右 的图片
65     if (offsetX <= 0 || offsetX >= w * 2) {
66         // 2.1.交换 中间的 和 循环利用的
67         UIImageView *temp = _centerView;
68         _centerView = _reusableView;
69         _reusableView = temp;
70         
71         // 2.2.设置显示位置
72         _centerView.frame = _reusableView.frame;
73         scrollView.contentOffset = CGPointMake(w, 0);
74         
75         [_reusableView removeFromSuperview];
76     } else {
77         [_scrollView addSubview:_reusableView];
78     }
79 }
80 @end

 

posted @ 2015-04-19 22:54  songxing10000  阅读(189)  评论(0编辑  收藏  举报