31-使用scrollView以及pageControl,NSTimer实现图片轮播

使用scrollView以及pageControl,NSTimer实现图片轮播




3.代码(控件界面和运行效果见文后图)

#import "ViewController.h"


//6.2遵守代理协议(UIScrollViewDelegate)

@interface ViewController ()<UIScrollViewDelegate>

@property (weaknonatomicIBOutlet UIScrollView *scrollView;

@property (weaknonatomicIBOutlet UIPageControl *pageControl;


//设置一个timer对象属性(属性在用之前一定要赋值)

@property (nonatomic,strong) NSTimer *timer;


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    int count=5;

    CGSize size=self.scrollView.frame.size;

    CGFloat imgW=size.width;

    CGFloat imgH=size.height;

    

    //1.创建5个ImageView

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

        UIImageView *imageView=[[UIImageView allocinit];

        [self.scrollView addSubview:imageView];

        

        NSString *imgName=[NSString stringWithFormat:@"img_%02d",i+1];

        imageView.image=[UIImage imageNamed:imgName];

        

        CGFloat imgY=0;

        CGFloat imgX=i*imgW;

        

        imageView.frame=CGRectMake(imgX, imgY, imgW, imgH);

        

    }

    //2. 设置滚动范围

    self.scrollView.contentSize=CGSizeMake(count * imgW, 0);

    

    //3.启用分页

    self.scrollView.pagingEnabled=YES;

    //4.禁用横向滚动条

    self.scrollView.showsHorizontalScrollIndicator=NO;

    

    //5.设置分页控件 pageControl

    //总页数 numberOfPages

    self.pageControl.numberOfPages=count;

    

    //6.设置代理

    //6.1设置属性

    self.scrollView.delegateself;

    

    //7.定时器

    //调用创建定时器的方法

    [self creatTimer];

   

}


//创建定时器

-(void) creatTimer

{

    //repeats 是否始终定时

    NSTimer *timer=[NSTimer timerWithTimeInterval:2.0 target:selfselector:@selector(nextImge) userInfo:nil repeats:YES];

    //NSRunLoop 消息循环 线程

    //当页面正在操作其他控件,继续执行当前轮换.将 NSDefaultRunLoopMode 改为 NSRunLoopCommonModes

    

    NSRunLoop *runloop=[NSRunLoop currentRunLoop];

    [runloop addTimer:timer forMode:NSRunLoopCommonModes];

    

    //属性在用之前一定要赋值

    self.timer=timer;

    

    //定时器一般要先等设置的秒数(当前2秒)以后在执行

    //立即调用定时器要执行的方法

    //[timer fire];

    

}


//切换下一张图片

-(void)nextImge

{

    //当前第几张

    NSInteger page=self.pageControl.currentPage;

    if (page==self.pageControl.numberOfPages-1) {

        page=0;

    }

    else

    {

        page++;

    }

    //同时设置pageControl

    self.pageControl.currentPage=page;

    

    [UIView animateWithDuration:1.0 animations:^{

        self.scrollView.contentOffset=CGPointMake(page*self.scrollView.frame.size.width, 0);

    }];

    

}


//6.3实现代理方法

#pragma mark -scrollView的代理方法


//同步pageControl

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    //当滚动的位置超过一半的时候设置pageControl的currentPage为下一张图片

    int page=(scrollView.contentOffset.x+0.5*scrollView.frame.size.width)/scrollView.frame.size.width;

    //pageControl的当前页 currentPage

    self.pageControl.currentPage=page;

    

}



//停止定时器

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    //停止定时器

    //停止定时器后,定时器不能再次使用

    [self.timer invalidate];

}


//重新开启定时器

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

{

    //调用创建定时器的方法

    [self creatTimer];

}




@end





1.控件界面


2.运行效果



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值