滚动视图、定时器、分页控件的综合使用

//
//  RootViewController.m
#import "RootViewController.h"
#define SCROLLWIDTH 300 //
#define SCROLLHEIGHT 350  //
@interface RootViewController ()
{
    //滚动视图的对象指针
    UIScrollView * scrollView;
    //分页控件的对象指针
    UIPageControl * pageCtr;
    //时间控制器的对象指针
    NSTimer * timer;

}
@end

@implementation RootViewController

//创建时间控制器
-(void)turnOnTimer{
    
    timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(playImage) userInfo:nil repeats:YES];
    
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

-(void)playImage{
    
    NSInteger number=scrollView.contentOffset.x/SCROLLWIDTH+1;
    if (number== 4) {
        number=0;
    }
    scrollView.contentOffset = CGPointMake(number * SCROLLWIDTH, 0);
    pageCtr.currentPage=number;
    number++;
}

//创建滚动视图
-(void)createScrollView
{
    scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(10, 70, SCROLLWIDTH, SCROLLHEIGHT)];
    scrollView.contentOffset = CGPointMake(0, 0);
    scrollView.contentSize = CGSizeMake(SCROLLWIDTH * 4, SCROLLHEIGHT);
    self.automaticallyAdjustsScrollViewInsets =NO;
    //跟导航条一起使用 不关会出现bug
    scrollView.bounces = NO;
    
    //设置scrollView的内容视图
    //scrollView上的子视图是平铺在滚动视图上 同一时刻只能显示与滚动视图范围相同大小的子视图
    for(int i =0;i<4;i++)
    {
        UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(SCROLLWIDTH * i, 0, SCROLLWIDTH, SCROLLHEIGHT)];
        NSString * nameStr = [NSString stringWithFormat:@"%d.jpg",i+1];
        imageView.image = [UIImage imageNamed:nameStr];
        [scrollView addSubview:imageView];
    }
    [self.view addSubview:scrollView];
    
    //隐藏横向、纵向的滚动条
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    
    //开启滚动视图的分页效果   不开启的话  五幅图变成一个整体
    scrollView.pagingEnabled = YES;
    
    scrollView.delegate = self;   //调用协议的方法  不调用的话分页控件无效果
    scrollView.minimumZoomScale = 1.0;
    scrollView.maximumZoomScale = 3.0;
}
-(void)createPageControl
{
    pageCtr=[[UIPageControl alloc]initWithFrame:CGRectMake(50, SCROLLHEIGHT-50, 200, 30)];
    //<1>设置分页控件的背景颜色
    pageCtr.backgroundColor=[UIColor clearColor];  //透明色
    //<2>设置分页控件的总页数
    pageCtr.numberOfPages=4;
    //<3>设置初始化分页控件的页码
    pageCtr.currentPage=0;
    
    //<4>
    [self.view addSubview:pageCtr];
    
    //<5>为pageControl添加点击事件
    [pageCtr addTarget:self action:@selector(pressPageControl:) forControlEvents:UIControlEventValueChanged];
}
-(void)pressPageControl:(id)sender
{
    //分页控件一次只能跳转一页 并且只能跳转相邻的页码
    //<1>获取当前控件的显示页码
    int pageNum =(int)pageCtr.currentPage;
    //<2>设置内容视图的偏移位置contentOffSet的值
    [UIView animateWithDuration:0.3 animations:^{
        //0.3是每次换页动作的需要时间
        
    scrollView.contentOffset = CGPointMake(pageNum * SCROLLWIDTH, 0);
        
    } completion:nil];
}
//实现协议中的方法
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    //由于全局变量的名称和该方法的形参名重名了 所以此处有警告
    return [[scrollView subviews] objectAtIndex:pageCtr.currentPage];
}

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //<1>获取减速停止以后滚动视图上内容视图的偏移位置contentOffSet的值
    CGPoint point = scrollView.contentOffset;
    //<2>设置分页控件当前的页码
    pageCtr.currentPage = point.x / SCROLLWIDTH;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationItem.title = @"滚动视图";
    self.view.backgroundColor = [UIColor cyanColor];
    [self createScrollView];
    [self createPageControl];
    [self turnOnTimer];
    
}


@end

原文地址:https://www.cnblogs.com/sayimba/p/5708428.html