UIScrollview 三个imageview 实现无限循环滚动

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

猜你喜欢

转载自blog.csdn.net/woruosuifenglang/article/details/112249603