UIScrollerView 实现轮播图功能

#import "ViewController.h"


@interface ViewController () <UIScrollViewDelegate>


@property (nonatomic, strong) UIImageView *myImageView;

@property (nonatomic, strong) UIScrollView *scrollView;

@property (nonatomic, strong) UIPageControl *pageControl;

@property (nonatomic, strong) NSArray *imageArray;

@property (nonatomic, strong) NSMutableArray *viewArray;

@property (nonatomic, strong) NSTimer *timer; // 设置动画



@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];


    // 初始化

    self.scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];

    

    // 设置代理

    self.scrollView.delegate = self;

    

    // 设置自动分页 可以滚动

    self.scrollView.pagingEnabled = YES;

    

    // 开启用户交互

    self.scrollView.userInteractionEnabled = YES;

    [self.view addSubview:self.scrollView];


    [self loadImage];

    [self addtimer];

}


// 加载图片

- (void)loadImage

{

    // 初始化数组, 并将图片存放到数组中去

    self.imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"nba_0.jpg"],[UIImage imageNamed:@"nba_1.jpg"], [UIImage imageNamed:@"nba_2.jpg"],[UIImage imageNamed:@"nba_3.jpg"],[UIImage imageNamed:@"nba_4.jpg"],nil];

    

    for (int i = 0; i < self.imageArray.count; i++) {

        

        UIScrollView *newSview = [[UIScrollView alloc]initWithFrame:CGRectMake(i * self.view.frame.size.width, 0, self.view.frame.size.width, self.view.frame.size.height)];


        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"nba_%d.jpg",i]];

        

        self.myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

        self.myImageView.image = image;

        self.myImageView.userInteractionEnabled = YES;

        newSview.delegate = self;


        

        [newSview addSubview:_myImageView];

        [_scrollView addSubview:newSview];

    }

    

    

    // 设置 contentsize

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * self.imageArray.count, self.view.frame.size.height);

    

    // 设置 pageControl

    self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height - 50, self.view.frame.size.width, 30)];

    self.pageControl.numberOfPages = self.imageArray.count;

    self.pageControl.currentPage = 0;

    self.pageControl.backgroundColor = [UIColor grayColor];

    // 代理方法

    [self.pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];

    

    [self.view addSubview:self.pageControl];

  

    

    

#pragma mark---- 存放 controller 的数组

    self.viewArray = [[NSMutableArray alloc]init];

    for (int i = 0 ; i< self.imageArray.count; i++) {

        

        [self.viewArray addObject:[NSNull null]];

    }

    

}


// 点击事件

- (void)changePage:(id)sender

{

    [self.scrollView setContentOffset:CGPointMake(self.pageControl.currentPage * self.view.frame.size.width, 0)];

}



// 滚动结束时候, 圆点和图片一起滚动

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

//    NSInteger index = self.scrollView.contentOffset.x / self.view.frame.size.width;

//    self.pageControl.currentPage = index;

    

    // 或者

    self.pageControl.currentPage = fabs(self.scrollView.contentOffset.x / self.view.frame.size.width);

}


//  通过计时器来实现轮播


#pragma mark----- 时间管理轮播图播放

- (void)addtimer{

    

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

    // 添加到主线程中去, 返回当前的消息循环对象

    [[NSRunLoop mainRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];

}



- (void)repeatPage

{

    int page = 0;

    if (self.pageControl.currentPage == 4) {

        page =0;

    }else{

        page = (int)self.pageControl.currentPage + 1;

    }

    

    // 计算滚动位置

    

    CGFloat offsetX = page * _scrollView.frame.size.width;

    CGPoint offset = CGPointMake(offsetX, 0);

    

    [_scrollView setContentOffset:offset animated:YES];

}


// 滚动事件, 开始滚动的时候, 改变 pageControl currentPage 的值

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    CGFloat scrollX = _scrollView.frame.size.width;

    int page = (scrollView.contentOffset.x + scrollX * 0.5 ) / scrollX;

    self.pageControl.currentPage = page;

}



//- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

//{

//    [self.timer invalidate];

//    self.timer = nil;

//}

//

//- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

//{

//    [self addtimer];

//}







- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值