关于ios图片无限轮播

本文详细介绍了如何使用Objective-C实现一个图片无线轮播器的功能,包括布局、动画、分页以及定时切换等关键部分。

这几天需要写一个图片的无线轮播器。所以去网上看了一下,比照着人家的方法,自己的demo大家可以看一下。




#import "ViewController.h"


@interface ViewController ()<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,strong)NSTimer *timer;                 //设置动画


@property(nonatomic,retain)NSArray *array;//图片数组


@property(nonatomic,weak)UIPageControl *page;//分页

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    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 * 4, height)];

    //  设置隐藏横向条

    self.scrollView.showsHorizontalScrollIndicator = NO;

    //  设置自动分页

    self.scrollView.pagingEnabled = YES;

    //  设置代理

    self.scrollView.delegate = self;

    //  设置当前点

    self.scrollView.contentOffset = CGPointMake(width, 0);

    //  设置是否有边界

    self.scrollView.bounces = NO;

    

    self.array=@[@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg",@"5.jpg",@"6.jpg",@"7.jpg",];

    

    UIPageControl *page=[[UIPageControl alloc]initWithFrame:CGRectMake(100, 200, 200, 100)];

    self.page=page;

    [self.view addSubview:self.page];

    self.page.numberOfPages=self.array.count;

    self.page.currentPageIndicatorTintColor=[UIColor redColor];

    

    

    

    //  初始化当前视图

    UIImageView *currentImageView =[[UIImageView alloc] init];

    currentImageView.image = [UIImage imageNamed:self.array[0]];

    [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:self.array[1]];

    [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:self.array[2]];

    preImageView.frame = CGRectMake(0, 0, width, height);

    [self.scrollView addSubview:preImageView];

    self.preImageView = preImageView;

    //self.preImageView.contentMode =UIViewContentModeScaleAspectFill;

    

    [self loadTimer];

    

}

//开始

-(void)loadTimer

{

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(update:) userInfo:nil repeats:YES];

}

- (void)update:(NSTimer *)timer{

    //定时移动

    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;

    }

    

    //有点错误

    self.page.currentPage++;

    if (self.page.currentPage==self.array.count-1) {

        self.page.currentPage=0;

    }

    

    

}

//停止

-(void)stopTimer

{

    [self.timer invalidate];

}

#pragma mark - UIScrollViewDelegate

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    [self stopTimer];

}

//  停止滚动

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    [self loadTimer];

}


// 开始拖动

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{

    static NSInteger i =1; //当前展示的是第几张图片

    float offset = self.scrollView.contentOffset.x;

    if (self.nextImageView.image == nil || self.preImageView.image == nil) {

        //  加载下一个视图

        NSString *imageName1 = [NSString stringWithFormat:@"%ld.jpg",i == self.array.count ? 1:i +1];

        _nextImageView.image = [UIImage imageNamed:imageName1];

        // 加载上一个视图

        NSString *imageName2 = [NSString stringWithFormat:@"%lu.jpg",(unsigned long)(i==1 ? self.array.count :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 =self.array.count;

        } 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 == 7) {

            i  =1 ;

        }else{

            i +=1 ;

        }

    }

    

}



@end


可以直接运行


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值