UIScrollview 三个imageview 实现无限循环滚动,如果要实现自动滚动可以加定时器,定时器建议用GCD不建议用NSTimer(因为主线程会影响NSTimer计时器计时),具体差别可以自己查找。
@interface TPImageScrollView()<UIScrollViewDelegate>
/** <##> */
@property (nonatomic,strong) UIScrollView * ScrollView;
@property (nonatomic,strong) UIImageView * leftImageView;
@property (nonatomic,strong) UIImageView * centerImageView;
@property (nonatomic,strong) UIImageView * rightImageView;
/** 图片数组 */
@property (nonatomic,strong) NSMutableArray * imgArr;
/** 当前的索引*/
@property (nonatomic,assign) NSInteger currentIndex;
@end
@implementation TPImageScrollView
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.imgArr = [NSMutableArray arrayWithArray:@[@"Welcome1",@"Welcome2",@"Welcome11",@"Welcome12"]];
[self setUI];
**//初始化数据**
[self changeImageLeft:self.imgArr.count - 1 center:0 right:1];
}
return self;
}
-(void)setUI{
self.ScrollView.frame = CGRectMake(0, 0, TPScreenW, 200);
[self addSubview:self.ScrollView];
self.leftImageView.frame = CGRectMake(0, 0, self.width, self.height);
[self.ScrollView addSubview:self.leftImageView];
self.centerImageView.frame = CGRectMake(TPScreenW, 0, self.width, self.height);
[self.ScrollView addSubview:self.centerImageView];
self.rightImageView.frame = CGRectMake(TPScreenW* 2, 0, self.width, self.height);
[self.ScrollView addSubview:self.rightImageView];
}
**//给控件赋值**
- (void)changeImageLeft:(NSInteger)LeftIndex center:(NSInteger)centerIndex right:(NSInteger)rightIndex
{
self.leftImageView.image = [UIImage imageNamed: self.imgArr[LeftIndex] ] ;
self.centerImageView.image = [UIImage imageNamed: self.imgArr[centerIndex] ] ;
self.rightImageView.image = [UIImage imageNamed: self.imgArr[rightIndex] ] ;
**// 每一次滚动完成后都设置ScrollView 的偏移量**
[self.ScrollView setContentOffset:CGPointMake(TPScreenW, 0)];
}
#pragma mark --- UIScrollViewDelegate 代理
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat offsetX = scrollView.contentOffset.x;
if (offsetX >= TPScreenW * 2)
{
self.currentIndex++;
if (self.currentIndex == self.imgArr.count-1)
{
[self changeImageLeft:self.currentIndex-1 center:self.currentIndex right:0];
}else if (self.currentIndex == self.imgArr.count)
{
self.currentIndex = 0;
[self changeImageLeft:self.imgArr.count-1 center:0 right:1];
}else
{
[self changeImageLeft:self.currentIndex-1 center:self.currentIndex right:self.currentIndex+1];
}
}
if (offsetX <= 0)
{
self.currentIndex--;
if (self.currentIndex == 0) {
[self changeImageLeft:self.imgArr.count-1 center:0 right:1];
}else if (self.currentIndex == -1) {
self.currentIndex = self.imgArr.count-1;
[self changeImageLeft:self.currentIndex-1 center:self.currentIndex right:0];
}else {
[self changeImageLeft:self.currentIndex-1 center:self.currentIndex right:self.currentIndex+1];
}
}
}
#pragma mark --- 懒加载
-(UIScrollView *)ScrollView{
if (!_ScrollView) {
_ScrollView = [[UIScrollView alloc]init];
_ScrollView.delegate = self;
**//pagingEnabled UIScrollView滚动一页的数据**
_ScrollView.pagingEnabled = YES;
_ScrollView.showsHorizontalScrollIndicator = NO;
_ScrollView.contentSize = CGSizeMake(TPScreenW * 3, 0);
}
return _ScrollView;
}
-(UIImageView *)leftImageView{
if (!_leftImageView) {
_leftImageView = [[UIImageView alloc]init];
}
return _leftImageView;
}
-(UIImageView *)centerImageView{
if (!_centerImageView) {
_centerImageView = [[UIImageView alloc]init];
}
return _centerImageView;
}
-(UIImageView *)rightImageView{
if (!_rightImageView) {
_rightImageView = [[UIImageView alloc]init];
}
return _rightImageView;
}
-(NSMutableArray *)imgArr{
if (!_imgArr) {
_imgArr = [NSMutableArray array];
}
return _imgArr;
}
@end