事前准备:

1. 准备 UIPageControl 显示需要的两种图片 

2. 准备 UIimageView  显示需要的图片,本例 使用了 5张

代码如下:

 

#import "ViewController.h"

 

@interface ViewController () <UIScrollViewDelegate>

 

// 自定义声明照片张数

@property (assign,nonatomic)NSInteger *count;

 

/** 定义页码*/

 

@property (nonatomic,weak)UIPageControl  *page;

 

/** scrollView*/

 

@property (nonatomic,weak)UIScrollView  *scrollView;

 

/** 定时器*/

 

@property (nonatomic,weak)NSTimer  *timer;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    

    // 创建scrollView

    

    [self buildScrollView];

    

}

 

 

-(void)buildScrollView {

    

#pragma mark 创建UIScrollView

    

    UIScrollView *scrollView = [[UIScrollView alloc]init];

    scrollView.frame = CGRectMake(30, 100, 300, 180);

    scrollView.backgroundColor = [UIColor redColor];

    

    // 给全局变量赋值

    self.scrollView = scrollView;

 

    [self.view addSubview:scrollView];

    

    //定义照片张数

    NSInteger count = 5;

    

    // 遍历创建imageView 并添加图片

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

        

#pragma mark  计算imageView 中 x 值位置,并创建

        CGFloat x = scrollView.frame.size.width * (i % count);

        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(x, 0,scrollView.frame.size.width, scrollView.frame.size.height)];

        

        // 获取图片名称

        NSString *name = [NSString stringWithFormat:@"img_0%i",i + 1];

        

        //设置图片

        imageView.image = [UIImage imageNamed:name];

        

        //设置图片模式,填充满imageView

        imageView.contentMode = UIViewContentModeScaleToFill;

        

        [scrollView addSubview:imageView];

    }

   

    //设置 scrollView 的滚动范围

    scrollView.contentSize = CGSizeMake(count * scrollView.frame.size.width, 0);

    

    // 开启分页功能

    // 标准:以scrollView的尺寸为一页

    scrollView.pagingEnabled = YES;

    

#pragma mark 创建UIPageControl

    UIPageControl *page = [[UIPageControl alloc]init];

    

    // 给全局变量赋值

    self.page = page;

    

    page.frame = CGRectMake(190, 230, 90, 30);

    

    

    //设置总页数 ,注意不要写死;

    page.numberOfPages = count;

    

#pragma mark 使用kvc 赋值,注意:这是UIPageControl 中的内部属性,在xcode7之前是可见的,注意path路径不要写错

    [page setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];

    

    [page setValue:[UIImage imageNamed:@"other"] forKeyPath:@"_pageImage"];

    

    [self.view addSubview:page];

    

    

    // 页码 的滚动 需要设置代理,调用代理方法

    scrollView.delegate = self;

    

    //创建定时器

 self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextpage) userInfo:nil repeats:YES];

    

#pragma mark 修改定时器在主线程中的模式

    // 修改定时器在主线程中的模式 NSDefaultRunLoopMode 改为 NSRunLoopCommonModes 让主线程分配时间,

//    NSDefaultRunLoopMode默认模式下.主线程同一时间只会处理一个事物

//    NSRunLoopCommonModes 同一时间可以分配时间处理其他事物

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

    

}

 

 // 定时器调用的方法,滚动到下一页

-(void)nextpage {

 

    // 计算下一页的页码

        NSInteger i = (int)(self.scrollView.contentOffset.x / self.scrollView.frame.size.width) + 1 ;

    

    //如果页码数为 5 ,返回第一页

        if (i == 5) {

            

            i = 0;

        }

    

    // 将 scrollView 的内容滚动到对应页码图片

        [self.scrollView setContentOffset:CGPointMake(i * self.scrollView.frame.size.width, 0) animated:YES];

    

    // 设置UIPageControl的当前页码

    self.page.currentPage = i;

    

}

 

 

// 代理方法

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

    

    if (decelerate == 0) {

        

        [self disletPage];

 

    }

}

 

//代理方法

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

    

    [self disletPage];

    

}

 

 

//计算页码

 

-(void)disletPage {

    

    // 计算页码

   NSInteger pages = (int) (self.scrollView.contentOffset.x / self.scrollView.bounds.size.width + 0.5);

    

    //设置当前页码

    self.page.currentPage = pages;

    

    // 如果 页码数为 4,则设置返回第一页

    if (pages == 4) {

        pages = 0;

        

        // 延迟 2.0s 调用方法

        [self performSelector:@selector(play) withObject:nil afterDelay:2.0];

        

        

    }

    

}

 

 

// 延迟调用的方法

-(void)play{

 

    self.page.currentPage = 0;

     [self.scrollView setContentOffset:CGPointMake(0 , 0) animated:YES];

}

 

// 开始减速停止定时器

 

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

    

    [self.timer invalidate];

 

}

// 即将停止拖拽.开启定时器

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

{

    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextpage) userInfo:nil repeats:YES];

}

 

@end