前段时间听到一妹子说去面试的时候,面试官让封装一个简单地定时器图片无限轮播,我今日闲来无事,就自己动手封装了一个。就只需要传入图片的个数和定时器的间隔时间就ok啦。图片的点击方法也实现了,后续根据自己需要略微的修改一下就好啦。不多说了,我上代码了,这个蛮简单的。当然啦,如果有需要原工程的帅锅美女可以加我QQ哈:2282476949
首先是ScrollViewLy.h 文件哈
@protocol ScrollViewLyDeleagte <NSObject>
@optional
-(void)ScrollViewLyDeleagteMethod:(NSInteger)sender;
@end
@interface ScrollViewLy : UIView<UIScrollViewDelegate>
{
UIPageControl * pageControl;
UIScrollView * scrollview;
NSTimer * timer;
int imgNumbers;
NSTimeInterval timeInterval;
}
@property (nonatomic,weak) id <ScrollViewLyDeleagte> Sdelegate;
-(instancetype)initWithFrame:(CGRect)frame WithImgNumber:(int)number withTimer:(NSTimeInterval)time;
@end
然后是ScrollViewLy.m 文件哈
#import "ScrollViewLy.h"
@implementation ScrollViewLy
-(instancetype)initWithFrame:(CGRect)frame WithImgNumber:(int)number withTimer:(NSTimeInterval)time
{
self = [super initWithFrame:frame];
if (self) {
timeInterval = time;
imgNumbers = number;
scrollview = [[UIScrollView alloc]initWithFrame:frame];
[self addSubview:scrollview];
scrollview.delegate = self;
scrollview.pagingEnabled = YES; //设置分页
// 图片的宽
CGFloat imageWidth = scrollview.frame.size.width;
// CGFloat imageW = 300;
// 图片高
CGFloat imageHeight = scrollview.frame.size.height;
// 图片的Y
CGFloat imageY = 0;
// 图片中数
// 1.添加5张图片
for (int i = 0; i < imgNumbers; i++) {
UIImageView *imageView = [[UIImageView alloc] init];
// 图片X
CGFloat imageX = i * imageWidth;
// 设置frame
imageView.frame = CGRectMake(imageX, imageY, imageWidth, imageHeight);
// 设置图片
NSString *name = [NSString stringWithFormat:@"img-%d.jpg", i + 1];
imageView.image = [UIImage imageNamed:name];
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Clicked)];
[singleTap view].tag = i;
[imageView addGestureRecognizer:singleTap];
// 隐藏指示条
scrollview.showsHorizontalScrollIndicator = NO;
[scrollview addSubview:imageView];
}
//设置scrollView的滚动范围
CGFloat contentWidth = imgNumbers * imageWidth;
//不允许在垂直方向上进行滚动
scrollview.contentSize = CGSizeMake(contentWidth, 0);
if(timeInterval != 0){
[self addTimer];
}
[self addPageControl];
}
return self;
}
-(void)Clicked
{
if ([self.Sdelegate respondsToSelector:@selector(ScrollViewLyDeleagteMethod:)]) {
[self.Sdelegate ScrollViewLyDeleagteMethod:pageControl.currentPage];
}
}
-(void)addPageControl
{
pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(self.frame.size.width/2-20, self.frame.size.height+60, 40, 30)];
[self addSubview:pageControl];
pageControl.numberOfPages = imgNumbers;
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
}
-(void)nextImage
{
int page = (int)pageControl.currentPage;
if (page == imgNumbers-1) {
page = 0;
}else
{
page++;
}
// 滚动scrollview
CGFloat x = page * self.frame.size.width;
scrollview.contentOffset = CGPointMake(x, 0);
}
- (void)addTimer
{
timer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
}
- (void)removeTimer
{
[timer invalidate];
timer = nil;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
{
NSLog(@"正在滚动哦");
//计算页码
CGFloat scrolleViewWidth = scrollView.frame.size.width;
CGFloat X = scrollView.contentOffset.x;
int page = (X+scrolleViewWidth/2) / scrolleViewWidth;
NSLog(@"%d",page);
pageControl.currentPage = page;
[pageControl sizeForNumberOfPages:page];
}
//开始拖拽视图
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
{
//开始手动拖拽的时候移除定时器
[self removeTimer];
}
//完成拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
{
//手动拖拽的时候添加定时器
if(timeInterval != 0){
[self addTimer];
}
}
最后就是应用啦,只要importScrollViewLy.h 文件,并实现其代理方法-(void)ScrollViewLyDeleagteMethod:(NSInteger)sender就好啦。
- (void)viewDidLoad {
[super viewDidLoad];
ScrollView = [[ScrollViewLy alloc]initWithFrame:CGRectMake(0,100, self.view.frame.size.width, 300) WithImgNumber:4 withTimer:2];
ScrollView.Sdelegate = self;
[self.view addSubview:ScrollView];
}
-(void)ScrollViewLyDeleagteMethod:(NSInteger)sender
{
switch (sender) {
case 0:
NSLog(@"第一张图片哈。。。");
break;
case 1:
NSLog(@"第二张图片哈。。。");
break;
case 2:
NSLog(@"第三张图片哈。。。");
break;
default:
NSLog(@"第四张图片哈。。。");
break;
}
}
好啦,实现啦,是不是很简单哇,哈哈哈~