滑动视图的实现过程:
代码如下:
.h文件:
#import <UIKit/UIKit.h>
@interface LoopView : UIView
@property (nonatomic,strong) NSArray *imageArray;
@end
.m文件:#import "LoopView.h"
@interface LoopView() <UIScrollViewDelegate> {
//定义一个定时器
NSTimer *_timer;
}
//滑动视图所需要的属性
@property (nonatomic,strong)UIScrollView *scrollView;
@property (nonatomic,strong)UIPageControl *pageControl;
@property (nonatomic,strong)UIImageView *leftImage;
@property (nonatomic,strong)UIImageView *middenImage;
@property (nonatomic,strong)UIImageView *rightImage;
@property (nonatomic,assign)NSInteger currentNum;
@end
@implementation LoopView
//初始化
- (instancetype) initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)setImageArray:(NSArray *)imageArray {
_imageArray = imageArray;
//初始化控件
[self creatView];
}
#pragma mark - 初始化控件
- (void)creatView {
// 设置宽高
CGFloat width = self.frame.size.width;
CGFloat height = self.frame.size.height;
// 设置scrollView的属性
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
//打开分页属性
_scrollView.pagingEnabled = YES;
//关闭水平和垂直方向的显示条
_scrollView.showsVerticalScrollIndicator = NO;
_scrollView.showsHorizontalScrollIndicator = NO;
//设置滑动范围
_scrollView.contentSize = CGSizeMake(width * _imageArray.count,height);
//设置代理方法
_scrollView.delegate = self;
//添加到视图上
[self addSubview:_scrollView];
// 设置分页控件的属性
_pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 30, width, 30)];
//设置分页控件的分页数
_pageControl.numberOfPages = _imageArray.count;
//设置当前分页数
_pageControl.currentPage = 0;
//设置分页控件的显示颜色
_pageControl.pageIndicatorTintColor = [UIColor redColor];
//添加到视图上面
[self addSubview:_pageControl];
// 设置左中右三个imageView的frame
_leftImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,width , height)];
_middenImage = [[UIImageView alloc] initWithFrame:CGRectMake(width, 0,width , height)];
_rightImage = [[UIImageView alloc] initWithFrame:CGRectMake(width * 2, 0,width , height)];
//添加到视图上
[_scrollView addSubview:_leftImage];
[_scrollView addSubview:_middenImage];
[_scrollView addSubview:_rightImage];
//开启定时器
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction:) userInfo:nil repeats:YES];
// 设置图片
[self loadImage];
}
- (void) loadImage {
//给左中右三个imageView添加图片
_middenImage.image = [UIImage imageNamed:_imageArray[_currentNum]];
NSInteger leftIndex = (_currentNum - 1 + _imageArray.count)%_imageArray.count;
_leftImage.image = [UIImage imageNamed:_imageArray[leftIndex]];
NSInteger rightIndex = (_currentNum + 1) % _imageArray.count;
_rightImage.image = [UIImage imageNamed:_imageArray[rightIndex]];
_pageControl.currentPage = _currentNum;
}
#pragma mark - scrollView的代理方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x > self.frame.size.width) {
_currentNum = (_currentNum+1) %_imageArray.count;
} else if(scrollView.contentOffset.x < self.frame.size.width){
_currentNum = (_currentNum - 1+_imageArray.count) %_imageArray.count;
}
[self loadImage];
//设置滑动区域的大小
scrollView.contentOffset = CGPointMake(_scrollView.bounds.size.width, 0);
}
#pragma mark - 定时器的方法
- (void)timeAction:(NSTimer *)timer {
_currentNum = _currentNum % _imageArray.count;
[self loadImage];
_currentNum++;
_scrollView.contentOffset = CGPointMake(_scrollView.frame.size.width, 0);
}
@end