定时器图片轮播

前段时间听到一妹子说去面试的时候,面试官让封装一个简单地定时器图片无限轮播,我今日闲来无事,就自己动手封装了一个。就只需要传入图片的个数和定时器的间隔时间就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;
    }
} 

好啦,实现啦,是不是很简单哇,哈哈哈~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值