app图片轮播器,无限循环

1、一个.h文件    一个.m文件

2、拿走直接设置一个tableview的头视图,为这个文件的实例对象就ok了!

3、别忘了把我的图片名称改成,你自己的图片名称~

//
//  HJBHeaderScrollView.h
//  05-图片轮播器
//
//  Created by 小明 on 15/12/15.
//  Copyright © 2015年 itheima. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface HJBHeaderScrollView : UIScrollView

- (instancetype)initWithFrame:(CGRect)frame imgArray:(NSArray *)array;

- (void)addTimer;
- (void)removeTimer;
@end
//
//  HJBHeaderScrollView.m
//  05-图片轮播器
//
//  Created by 小明 on 15/12/15.
//  Copyright © 2015年 itheima. All rights reserved.
//

#import "HJBHeaderScrollView.h"
#import "Masonry.h"

@interface HJBHeaderScrollView ()<UIScrollViewDelegate>

@property(strong, nonatomic) UIPageControl *pageControl;
@property(nonatomic, strong) NSTimer *timer;
@property(nonatomic, strong) NSMutableArray *imgArr;

@property(strong, nonatomic) UIImageView *currentImageView;
@property(strong, nonatomic) UIImageView *leftImageView;
@property(strong, nonatomic) UIImageView *rightImageView;

@end

@implementation HJBHeaderScrollView

- (instancetype)initWithFrame:(CGRect)frame imgArray:(NSArray *)array {
  if (self = [super initWithFrame:frame]) {
    //   1.添加imageview
    CGFloat viewW = self.frame.size.width;
    self.imgArr = array.copy;
    self.bounces = NO;
    self.contentSize = CGSizeMake(3 * viewW, 0);
    [self setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
    self.showsVerticalScrollIndicator = NO;
    self.showsHorizontalScrollIndicator = NO;
    //    3.分页
    self.pagingEnabled = YES;
    [self setupUI];
    [self addTimer];
  }
  return self;
}

//定时器执行的方法
- (void)next {
  NSLog(@"====================");
  [self setContentOffset:CGPointMake(2 * self.frame.size.width, 0)
                animated:YES];
}
/**
 *  更新数据换页
 */
- (void)reloadImage {
  CGPoint offset = [self contentOffset];
  if (offset.x <= 2 * self.frame.size.width &&
      offset.x >= 1.5 * self.frame.size.width) {
    if (self.pageControl.currentPage == (self.pageControl.numberOfPages - 1)) {
      self.pageControl.currentPage = 0;
    } else {
      self.pageControl.currentPage =
          (self.pageControl.currentPage + 1) % (self.pageControl.numberOfPages);
    }
  } else if (offset.x >= 0 && offset.x <= 0.5 * self.frame.size.width) {
    if (self.pageControl.currentPage == 0) {
      self.pageControl.currentPage = (self.pageControl.numberOfPages - 1);
    } else {
      self.pageControl.currentPage =
          (self.pageControl.currentPage - 1) % (self.pageControl.numberOfPages);
    }
  }

  self.currentImageView.image = [UIImage
      imageNamed:[NSString stringWithFormat:@"img_0%ld",
                                            self.pageControl.currentPage]];

  self.rightImageView.image = [UIImage
      imageNamed:
          [NSString stringWithFormat:@"img_0%ld",
                                     (self.pageControl.currentPage + 1) >=
                                             (self.pageControl.numberOfPages)
                                         ? 0
                                         : (self.pageControl.currentPage + 1)]];

  self.leftImageView.image = [UIImage
      imageNamed:
          [NSString stringWithFormat:@"img_0%ld",
                                     (self.pageControl.currentPage - 1) < 0
                                         ? (self.pageControl.numberOfPages - 1)
                                         : (self.pageControl.currentPage - 1)]];
}
/**
 *  自动滚动结束调用
 *
 *  @param scrollView scrollView
 */
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
  [self reloadImage];
  [self setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
}
/**
 *  手动滚动结束调用
 *
 *  @param scrollView scrollView
 */
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  [self reloadImage];
  [self setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
}

//开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  //    移除定时器
  [self removeTimer];
}

//结束拖拽是调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
                  willDecelerate:(BOOL)decelerate {
  // 添加定时器
  [self addTimer];
}
// 添加定时器
- (void)addTimer {
  //    1.添加定时器
  NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0
                                                    target:self
                                                  selector:@selector(next)
                                                  userInfo:nil
                                                   repeats:YES];
  //    2.改变(添加)定时器的模式,能够同时处理两件事情
  [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
  self.timer = timer;
}
//    移除定时器
- (void)removeTimer {
  [self.timer invalidate];
  self.timer = nil;
}
/**
 *  设置界面控件
 */
- (void)setupUI {
  self.delegate = self;
  [self addSubview:self.currentImageView];
  [self addSubview:self.leftImageView];
  [self addSubview:self.rightImageView];
  [self addSubview:self.pageControl];
  self.pageControl.center = CGPointMake(1.5*self.frame.size.width, 180);
    //pageControl自动布局
//    [self.pageControl mas_makeConstraints:^(MASConstraintMaker *make) {
////        make.left.equalTo(self.mas_left).with.offset(1.5*self.frame.size.width);
//        make.bottom.equalTo(self.mas_bottom).with.offset(180);
//        make.centerX.mas_equalTo(self.frame.size.width);
//    }];
}

//滚动过程
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //下面两句话,把pageControl一直放在scrollview中间!
    CGPoint offset = [self contentOffset];
    self.pageControl.center = CGPointMake(1.5*self.frame.size.width+(offset.x - self.frame.size.width), 180);
}

/**
 *  懒加载imgArr
 *
 *  @return imgArr
 */
- (NSMutableArray *)imgArr {
  if (_imgArr == nil) {
    _imgArr = [NSMutableArray array];
  }
  return _imgArr;
}
/**
 *  懒加载pageControl
 *
 *  @return pageControl
 */
- (UIPageControl *)pageControl {
  if (_pageControl == nil) {
    _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 10)];
      _pageControl.pageIndicatorTintColor= [UIColor blueColor];
      _pageControl.currentPageIndicatorTintColor = [UIColor redColor];
    _pageControl.numberOfPages = self.imgArr.count;
    _pageControl.currentPage = 0;
  }
  return _pageControl;
}
/**
 *  懒加载控件
 *
 *  @return currentImageView
 */
- (UIImageView *)currentImageView {
  if (_currentImageView == nil) {
    _currentImageView =
        [[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width, 0,
                                                      self.frame.size.width,
                                                      self.frame.size.height)];
    //    _currentImageView.image = [UIImage imageNamed:@"img_00"];
    _currentImageView.image =
        [UIImage imageNamed:[NSString stringWithFormat:@"%@", self.imgArr[0]]];
  }
  return _currentImageView;
}
/**
 *  懒加载控件
 *
 *  @return leftImageView
 */
- (UIImageView *)leftImageView {
  if (_leftImageView == nil) {
    _leftImageView = [[UIImageView alloc]
        initWithFrame:CGRectMake(0, 0, self.frame.size.width,
                                 self.frame.size.height)];
    //    _leftImageView.image = [UIImage imageNamed:@"img_04"];
    _leftImageView.image = [UIImage
        imageNamed:[NSString stringWithFormat:@"%@", [self.imgArr lastObject]]];
  }
  return _leftImageView;
}
/**
 *  懒加载控件
 *
 *  @return rightImageView
 */
- (UIImageView *)rightImageView {
  if (_rightImageView == nil) {
    _rightImageView =
        [[UIImageView alloc] initWithFrame:CGRectMake(2 * self.frame.size.width,
                                                      0, self.frame.size.width,
                                                      self.frame.size.height)];
    //    _rightImageView.image = [UIImage imageNamed:@"img_01"];
    _rightImageView.image =
        [UIImage imageNamed:[NSString stringWithFormat:@"%@", self.imgArr[1]]];
  }
  return _rightImageView;
}

@end


你可能感兴趣的:(app图片轮播器,无限循环)