使用scrollView以及pageControl,NSTimer实现图片轮播
#import "ViewController.h"
//6.2遵守代理协议(UIScrollViewDelegate)
@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet 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 alloc] init];
[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.delegate= self;
//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