利用pageControl 来做自动轮播

//
// ViewController.m
// ui_自动轮播啊
//
// Created by Lynsea on 16/1/16.

//

import “ViewController.h”

define WIDTH [UIScreen mainScreen].bounds.size.width

define HEIGHT [UIScreen mainScreen].bounds.size.height

@interface ViewController ()
{
UIScrollView *scroll;
UIPageControl *pageCon;
UIPageControl *pageCon1;

NSTimer *_timer;

}
@end

@implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // 这个自动轮播视图的有两个pageControl;第一个pageControl是用来控制scrollview自动轮播,第二个是用来给人带来视觉效果.可以不要 通过scrollView的的偏移量可获得pageControl的页数,然后再改变scrollView的坐标.从而可达到自动轮播

    //本次例子是假设要放4张图片轮播,那么scrollview的ContentSize应该设成6个宽度,那么图片的放法为301230; 然后设置当前坐标为CGPointMake(WIDTH, 0)
    scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, WIDTH, 200)];
    [self.view addSubview:scroll];
    scroll.delegate = self;
    [scroll setPagingEnabled:YES];
    [scroll setShowsHorizontalScrollIndicator:NO];
    [scroll setContentSize:CGSizeMake(6*WIDTH, 0)];
    [scroll setContentOffset:CGPointMake(WIDTH, 0)];

    UIImageView *image1 = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, 200)];
    [image1 setImage:[UIImage imageNamed:@”iu3.jpg”]];
    [scroll addSubview:image1];

    UIImageView image2 = [[UIImageView alloc]initWithFrame:CGRectMake(WIDTH 5, 0, WIDTH, 200)];
    [image2 setImage:[UIImage imageNamed:@”iu0.jpg”]];
    [scroll addSubview:image2];

    for (int i = 1; i < 5; i ++) {
    UIImageView image = [[UIImageView alloc]initWithFrame:CGRectMake(WIDTH i, 0, WIDTH, 200)];
    [image setImage:[UIImage imageNamed:[NSString stringWithFormat:@”iu%d.jpg”,i-1]]];
    [scroll addSubview:image];

    }

    //这个pageControl设为隐藏,主要目的是获得位置来控制轮播
    pageCon = [[UIPageControl alloc]initWithFrame:CGRectMake(200, 150, 80, 30)];
    //因为scrollView实际上放了6张图片,所以页数设置为6
    [pageCon setNumberOfPages:6];
    //让初始页数设成一,所以就指向的图片为0
    pageCon.currentPage = 1;
    [pageCon setCurrentPageIndicatorTintColor:[UIColor redColor]];

    [self.view addSubview:pageCon];
    [pageCon setHidden:YES];
    //把定时器添加
    _timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
    // 添加到运行循环
    [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

    pageCon1 = [[UIPageControl alloc]initWithFrame:CGRectMake(250, 180, 80, 30)];
    [pageCon1 setNumberOfPages:4];
    [pageCon1 setCurrentPageIndicatorTintColor:[UIColor redColor]];
    [self.view addSubview:pageCon1];

}
//定时器方法
-(void)timerAction{

//页数是012345  别误会

//如果第一个page的当前页数小于5,就会自动跳到下一页,为什么没有5呢,因为它不会到达第五张,后面的Scroll有写到,当scroll到达最后一张的时候,会自动跳到第一张
if (pageCon.currentPage < 5) {
[scroll setContentOffset:CGPointMake((pageCon.currentPage +1) * WIDTH, 0) animated:YES];

}

}

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

//因为这个pageControl只有4页,所以当scroll.contentOffset.x= Width 时,它的页数为1
pageCon1.currentPage = (scroll.contentOffset.x /WIDTH) -1;

//这个是有6页的,所以正常偏移
pageCon.currentPage = scroll.contentOffset.x /WIDTH;
if (scroll.bounds.origin.x == 0) {
    //当scroll来到第0张的时候会自动跳到第五张图片,而且滑动效果关掉,就看不出了
    [scroll setContentOffset:CGPointMake(WIDTH *4, 0) animated:NO];
}
if (scroll.bounds.origin.x == 5*WIDTH) {
    //当Scroll来到第6张图片的时候会自动跳到第二张,即指向0
    [scroll setContentOffset:CGPointMake(WIDTH, 0) animated:NO];

}

}

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

_timer=[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];

}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[_timer invalidate];

}
- (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、付费专栏及课程。

余额充值