美文网首页
iOS 简易无限滚动的图片轮播器 Demo事例

iOS 简易无限滚动的图片轮播器 Demo事例

作者: JoshuaC | 来源:发表于2015-10-18 15:10 被阅读430次

    原文地址:http://blog.sina.com.cn/s/blog_6317728d0102vcpg.html

    图片轮播器 在很多应用软件中都有应用 ,需要制作 无限滚动的 ,下面贴上自己写的小Demo, 能实现相关的功能。

    Ps: 没有用到pageControl ,只是图片自动无限滚动 ,没有任何的 处理 。

    #import "ViewController.h"

    @interface ViewController : UIViewController

    @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

    其中图片的名称 是我自己添加的 ,从1到KOUNT  , 通过scrollView 的三层  实现 图片的无限滚动。

    相关文章

      网友评论

          本文标题:iOS 简易无限滚动的图片轮播器 Demo事例

          本文链接:https://www.haomeiwen.com/subject/fapacttx.html