轮播图 定时滚动
图片轮播器 在很多应用软件中都有应用 ,需要制作 无限滚动的 ,下面贴上自己写的小Demo, 能实现相关的功能。
#import "ViewController.h"
@interface ViewController : UIViewController <</span>UIScrollViewDelegate>
@property (nonatomic,weak) UIScrollView *scrollView;
@property (nonatomic,weak) UIImageView *currentImageView; // 当前imageView
@property (nonatomic,weak) UIImageView *nextImageView; // 下一个imageView
@property (nonatomic,weak) UIImageView *preImageView; //上一个imageView
@property (nonatomic,assign) BOOL isDragging; //是否正在拖动
@property (nonatomic,strong)NSTimer *timer; //设置动画
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIScrollView *scrollView =[[UIScrollView alloc] init];
CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;
scrollView.frame = CGRectMake(0, 0, width, height);
[self.view addSubview:scrollView];
self.scrollView = scrollView;
[self.scrollView setContentSize:CGSizeMake(width * 3, height)];
// 设置隐藏横向条
self.scrollView.showsHorizontalScrollIndicator = NO;
// 设置自动分页
self.scrollView.pagingEnabled = YES;
// 设置代理
self.scrollView.delegate = self;
// 设置当前点
self.scrollView.contentOffset = CGPointMake(width, 0);
// 设置是否有边界
self.scrollView.bounces = NO;
// 初始化当前视图
UIImageView *currentImageView =[[UIImageView alloc] init];
currentImageView.image = [UIImage imageNamed:@"1.jpg"];
[self.scrollView addSubview:currentImageView];
self.currentImageView = currentImageView;
self.currentImageView.frame = CGRectMake(width, 0, width, height);
self.currentImageView.contentMode = UIViewContentModeScaleAspectFill;
// 初始化下一个视图
UIImageView *nextImageView = [[UIImageView alloc] init];
nextImageView.image = [UIImage imageNamed:@"2.jpg"];
[self.scrollView addSubview:nextImageView];
self.nextImageView = nextImageView;
self.nextImageView.frame = CGRectMake(width * 2, 0, width, height);
self.nextImageView.contentMode = UIViewContentModeScaleAspectFill;
// 初始化上一个视图
UIImageView *preImageView =[[UIImageView alloc] init];
preImageView.image = [UIImage imageNamed:@"6.jpg"];
preImageView.frame = CGRectMake(0, 0, width, height);
[self.scrollView addSubview:preImageView];
self.preImageView = preImageView;
self.preImageView.contentMode =UIViewContentModeScaleAspectFill;
// 设置时钟动画 定时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:selfselector:@selector(update:) userInfo:nil repeats:YES];
// 将定时器添加到主线程
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void)update:(NSTimer *)timer{
//定时移动
if (_isDragging == YES) {
return ;
}
CGPoint offSet = self.scrollView.contentOffset;
offSet.x +=offSet.x;
[self.scrollView setContentOffset:offSet animated:YES];
if (offSet.x >= self.view.frame.size.width *2) {
offSet.x = self.view.frame.size.width;
}
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
_isDragging = YES;
}
// 停止滚动
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
_isDragging = NO;
step = 0;
}
// 开始拖动
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
static int i =1; // 当前展示的是第几张图片
float offset = self.scrollView.contentOffset.x;
if (self.nextImageView.image == nil || self.preImageView.image == nil) {
// 加载下一个视图
NSString *imageName1 = [NSString stringWithFormat:@"%d.jpg",i == KOUNT ? 1:i +1];
_nextImageView.image = [UIImage imageNamed:imageName1];
// 加载上一个视图
NSString *imageName2 = [NSString stringWithFormat:@"%d.jpg",i==1 ? KOUNT :i-1];
_preImageView.image = [UIImage imageNamed:imageName2];
}
if(offset ==0){
_currentImageView.image = _preImageView.image;
scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
_preImageView.image = nil;
if (i == 1) {
i =KOUNT;
} else{
i-=1;
}
}
if (offset == scrollView.bounds.size.width * 2) {
_currentImageView.image = _nextImageView.image;
scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
_nextImageView.image = nil;
if (i == KOUNT) {
i =1 ;
}else{
i +=1 ;
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end