UIScrollview three imageview to achieve infinite loop scrolling

The three imageviews of UIScrollview implement infinite loop scrolling. If you want to realize automatic scrolling, you can add a timer. The timer is recommended to use GCD and NSTimer is not recommended (because the main thread will affect the timing of the NSTimer timer). You can find the specific differences by yourself.

@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

Guess you like

Origin blog.csdn.net/woruosuifenglang/article/details/112249603