ScrollView中的圖片無限循環(huán)一直是現在APP中常用的構造。
.h文件中
#import <UIKit/UIKit.h>
@interface ScrollView : UIView
@property(nonatomic,strong) NSArray *imageArray;
@end
.m文件
#import "ScrollView.h"
//屏幕的寬度
#define kScreenW [UIScreen mainScreen].bounds.size.width
//設置UIScrollView的代理
@interface ScrollView () <UIScrollViewDelegate>{
//UIScrollView 滑動視圖
UIScrollView *_scrollView ;
//頁面控制器視圖
UIPageControl *_pageControl;
/**
* 三張圖片視圖刷袍,左 中 右
實現無限循環(huán)
*/
UIImageView *_middleImage;
UIImageView *_leftImage;
UIImageView *_rightImage;
//索引值 就當做是數組的下標
NSInteger _index;
}
@end
@implementation ScrollView
//覆寫initWithFrame
- (instancetype)initWithFrame:(CGRect)frame {
//設置初始下標
_index = 0;
self = [super initWithFrame:frame];
if (self != nil) {
}
return self;
}
//這里是獲取數據的
- (void)setImageArray:(NSArray *)imageArray {
_imageArray = imageArray;
//創(chuàng)建View
[self loadImage];
}
- (void)loadImage {
//本視圖的高度--》將來是要被ViewController調用的
CGFloat height = self.frame.size.height;
//大小 位置
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kScreenW, height)];
//分頁功能
_scrollView.pagingEnabled = YES;
//隱藏滑塊
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.showsVerticalScrollIndicator = NO;
//代理代咸,都懂的
_scrollView.delegate = self;
//滑動區(qū)域,因為只有三個imageView所以只需要三個屏幕寬度
_scrollView.contentSize = CGSizeMake(3*kScreenW, height);
//增加一個屏幕的寬度為第一次看到的視圖剛好是中間視圖
_scrollView.contentOffset = CGPointMake(kScreenW, 0);
[self addSubview:_scrollView];
//頁面控制的基本設置
_pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, height - 35, kScreenW, 35)];
_pageControl.numberOfPages = _imageArray.count;
_pageControl.currentPage = 0;
//設置三個imageView
_leftImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenW, height)];
_middleImage = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenW, 0, kScreenW, height)];
_rightImage = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenW *2, 0, kScreenW, height)];
[_scrollView addSubview:_leftImage];
[_scrollView addSubview:_rightImage];
[_scrollView addSubview:_middleImage];
[self addSubview:_pageControl];
//設置圖片
[self loadImageView];
}
- (void)loadImageView {
//上一張
NSInteger leftIndex = (_index - 1 + _imageArray.count) % _imageArray.count;
_leftImage.image = [UIImage imageNamed:_imageArray[leftIndex]];
//當前頁圖片
_middleImage.image = [UIImage imageNamed:_imageArray[_index]];
//下一張
NSInteger rightIndex = (_index + 1) %_imageArray.count;
_rightImage.image = [UIImage imageNamed:_imageArray[rightIndex]];
}
//當完成滑動減速調用的方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
//往左滑 --> 下一張
if (scrollView.contentOffset.x > kScreenW) {
//數組下標
_index =(_index + 1) %_imageArray.count;
//往右滑
}else if(scrollView.contentOffset.x < kScreenW){
_index = (_index - 1 + _imageArray.count) % _imageArray.count;
}
//重新設置圖片
[self loadImageView];
//設置偏移區(qū)間
scrollView.contentOffset = CGPointMake(kScreenW, 0);
//頁面控制器的點點的變化
_pageControl.currentPage = (_index ) %_imageArray.count;
}
@end