天天看點

iOS 簡易無限滾動的圖檔輪播器 Demo事例

#import "ViewController.h"

@interface ViewController : UIViewController <</span>UIScrollViewDelegate>
@property (nonatomic,weak) UIScrollView *scrollView;
@property (nonatomic,weak) UIImageView *currentImageView;   // 目前imageView
@property (nonatomic,weak) UIImageView *nextImageView;      // 下一個imageView
@property (nonatomic,weak) UIImageView *preImageView;       //上一個imageView
@property (nonatomic,assign) BOOL isDragging;               //是否正在拖動
@property (nonatomic,strong)NSTimer *timer;                 //設定動畫
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIScrollView *scrollView =[[UIScrollView alloc] init];
    CGFloat width = self.view.frame.size.width;
    CGFloat height = self.view.frame.size.height;
    scrollView.frame = CGRectMake(0, 0, width, height);
    [self.view addSubview:scrollView];
    self.scrollView = scrollView;
    [self.scrollView setContentSize:CGSizeMake(width * 3, height)];
    //  設定隐藏橫向條
    self.scrollView.showsHorizontalScrollIndicator = NO;
    //  設定自動分頁
    self.scrollView.pagingEnabled = YES;
    //  設定代理
    self.scrollView.delegate = self;
    //  設定目前點
    self.scrollView.contentOffset = CGPointMake(width, 0);
    //  設定是否有邊界
    self.scrollView.bounces = NO;
    //  初始化目前視圖
    UIImageView *currentImageView =[[UIImageView alloc] init];
    currentImageView.image = [UIImage imageNamed:@"1.jpg"];
    [self.scrollView addSubview:currentImageView];
    self.currentImageView = currentImageView;
    self.currentImageView.frame = CGRectMake(width, 0, width, height);
    self.currentImageView.contentMode = UIViewContentModeScaleAspectFill;
    //  初始化下一個視圖
    UIImageView *nextImageView = [[UIImageView alloc] init];
    nextImageView.image = [UIImage imageNamed:@"2.jpg"];
    [self.scrollView addSubview:nextImageView];
    self.nextImageView = nextImageView;
    self.nextImageView.frame = CGRectMake(width * 2, 0, width, height);
    self.nextImageView.contentMode = UIViewContentModeScaleAspectFill;
    //  初始化上一個視圖
    UIImageView *preImageView =[[UIImageView alloc] init];
    preImageView.image = [UIImage imageNamed:@"6.jpg"];
    preImageView.frame = CGRectMake(0, 0, width, height);
    [self.scrollView addSubview:preImageView];
    self.preImageView = preImageView;
    self.preImageView.contentMode =UIViewContentModeScaleAspectFill;
    
    //  設定時鐘動畫 定時器

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(update:) userInfo:nil repeats:YES];
    //  将定時器添加到主線程
    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    
}
- (void)update:(NSTimer *)timer{
    //定時移動
    
    if (_isDragging == YES) {
        return ;
    }
    CGPoint offSet = self.scrollView.contentOffset;
   offSet.x +=offSet.x;
   [self.scrollView setContentOffset:offSet animated:YES];

    if (offSet.x >= self.view.frame.size.width *2) {
        offSet.x = self.view.frame.size.width;
    }
    
    
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    _isDragging = YES;
}
//  停止滾動
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    _isDragging = NO;
    step = 0;
}

// 開始拖動
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
    static int i =1; //   目前展示的是第幾張圖檔
    float offset = self.scrollView.contentOffset.x;
    if (self.nextImageView.image == nil || self.preImageView.image == nil) {
        //  加載下一個視圖
        NSString *imageName1 = [NSString stringWithFormat:@"%d.jpg",i == KOUNT ? 1:i +1];
        _nextImageView.image = [UIImage imageNamed:imageName1];
        // 加載上一個視圖
        NSString *imageName2 = [NSString stringWithFormat:@"%d.jpg",i==1 ? KOUNT :i-1];
        _preImageView.image = [UIImage imageNamed:imageName2];
    }
    if(offset ==0){
        _currentImageView.image = _preImageView.image;
        scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
        _preImageView.image = nil;
        if (i == 1) {
            i =KOUNT;
        } else{
            i-=1;
        }
    }
    if (offset == scrollView.bounds.size.width * 2) {
        _currentImageView.image = _nextImageView.image;
        scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
        _nextImageView.image = nil;
        if (i == KOUNT) {
            i  =1 ;
        }else{
            i +=1 ;
        }
    }
    
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

 
@end
           

圖檔輪播器 在很多應用軟體中都有應用 ,需要制作 無限滾動的 ,下面貼上自己寫的小Demo, 能實作相關的功能。

Ps: 沒有用到pageControl ,隻是圖檔自動無限滾動 ,沒有任何的 處理 。