第一步:在外界也就是ViewController里提供你需要的数据,一般是轮播图的位置和有多少图片
代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.automaticallyAdjustsScrollViewInsets = NO;
// 添加轮播图
// 设置轮播图的frame
RotateView *rotate = [RotateView rotateViewWithFrame:CGRectMake(0, 60, sWIDTH, 240)];
// 给轮播图传一个数组
NSArray *imageArray = @[@"http://www.ppt123.net/beijing/uploadfiles_8374/201203/2012032517501327.jpg", @"http://pic13.nipic.com/20110415/1347158_132411659346_2.jpg",@"http://pic25.nipic.com/20121126/8305779_171431388000_2.jpg",@"http://pic2.ooopic.com/01/03/51/25b1OOOPIC19.jpg"];
rotate.photoArray = imageArray;
// 点击轮播图的图片进入详情页面
__weak ViewController *test = self;
rotate.block = ^(NSInteger imageIndex){
DetailViewController *detailVC = [[DetailViewController alloc] init];
[test.navigationController pushViewController:detailVC animated:YES];
NSLog(@"%ld",imageIndex);
};
[self.view addSubview:rotate];
}
2、在你封装好的view里面实现无限轮播:代码如下:
// 初始化方法
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
_scrollView.pagingEnabled = YES;
_scrollView.delegate = self;
_scrollView.showsHorizontalScrollIndicator = NO;
[self addSubview:_scrollView];
}
return self;
}
// 遍历构造器方法
+ (instancetype)rotateViewWithFrame:(CGRect)frame{
RotateView *rotate = [[RotateView alloc] initWithFrame:frame];
return rotate;
}
// 重写set方法,接收数组的传值
- (void)setPhotoArray:(NSArray *)photoArray {
_photoArray = photoArray;
_scrollView.contentSize = CGSizeMake(kWidth * _photoArray.count, 0);
[self addImageViewForScrollView];
[self addPageControl];
[self addTimerLoop];
}
// 给scrollView添加图片和button
- (void)addImageViewForScrollView {
if (_photoArray != nil) {
for (int i = 0; i < _photoArray.count; i++) {
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(kWidth * i, 0, kWidth, kHeight)];
[imageView sd_setImageWithURL:_photoArray[i] placeholderImage:nil];
UIButton *button = [[UIButton alloc] initWithFrame: CGRectMake(kWidth * i, 0, kWidth, kHeight)];
[button addTarget:self action:@selector(tapImageButton:) forControlEvents:UIControlEventTouchUpInside];
button.tag = i + 100;
[_scrollView addSubview:imageView];
[_scrollView addSubview:button];
}
}
}
// 点击button,通过block传值
- (void) tapImageButton:(UIButton *)button {
if (_block) {
_block (button.tag);
}
}
// 创建pageControl
- (void)addPageControl {
self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, kHeight - 20, kWidth, 20)];
_pageControl.numberOfPages = _photoArray.count;
_pageControl.currentPage = 0;
_pageControl.pageIndicatorTintColor = [UIColor grayColor];
_pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
[_pageControl addTarget:self action:@selector(changePage:) forControlEvents:(UIControlEventValueChanged)];
[self addSubview:_pageControl];
}
// 实现方法
- (void)changePage:(UIPageControl *)pageControl {
_scrollView.contentOffset = CGPointMake(_pageControl.currentPage * kWidth, 0);
}
// 实现代理方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
_pageControl.currentPage = scrollView.contentOffset.x / kWidth;
[self addTimerLoop];
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
[_timer invalidate];
}
// 根据偏移量改变当前的页数
- (void)changeOffSet {
CGFloat x = _scrollView.contentOffset.x;
if (x >= (_photoArray.count - 1) * kWidth) {
_scrollView.contentOffset = CGPointMake(0, 0);
_pageControl.currentPage = 0;
}else{
_scrollView.contentOffset = CGPointMake(x + kWidth, 0);
_pageControl.currentPage ++;
}
}
// 添加timer
- (void) addTimerLoop {
_timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(changeOffSet) userInfo:nil repeats:YES];
}