UIScrollView無限廣告輪播圖

1.廣告輪播圖,在不同的app上都能看到這樣的效果,我用兩種方法實現了,給大家說下思路,第一種是:如果有5張圖片,5-1-2-3-4-5-1需要7個imageview來實現,添加UIPageContrl,NSTimer等這些基礎的東西,大家自己實現,這個這里只是講下具體代碼

- (void)initWithUIScrollView{
    _scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, AppRealValue(180))];
    _scrollView.contentSize = CGSizeMake(KScreenWidth * _imageArray.count, 0);
    _scrollView.pagingEnabled = YES;
    _scrollView.bounces = NO;
    _scrollView.backgroundColor = [UIColor purpleColor];
    self.scrollView.showsHorizontalScrollIndicator = NO;
    self.scrollView.delegate = self;
    self.scrollView.contentOffset = CGPointMake(KScreenWidth, 0);
    for (int i = 0; i < _imageArray.count; i++) {
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(KScreenWidth * i, 0, KScreenWidth, AppRealValue(180))];
        imageView.image = [UIImage imageNamed:_imageArray[i]];
        [self.scrollView addSubview:imageView];
    }
    [self.view addSubview:self.scrollView];
}

UIScrollView的代理方法來實現圖片滑動

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSInteger page = self.scrollView.contentOffset.x / KScreenWidth;
    if (page == 0) {
        [self.scrollView setContentOffset:CGPointMake(KScreenWidth * ([_imageArray count] - 2), 0) animated:NO];
        self.pageControl.currentPage = [self.imageArray count] - 3;
    }else if (page == [self.imageArray count] -1){
        [self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
        self.pageControl.currentPage = 0;
    }else{
        self.pageControl.currentPage = page - 1;
    }
}

定時器自動顯示不同圖片

- (void)nextImage{
    NSInteger page = self.pageControl.currentPage;
    if (page == [self.imageArray count] - 3) {
        self.pageControl.currentPage = 0;
        [self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
    }else{
        self.pageControl.currentPage = page + 1;
        [self.scrollView setContentOffset:CGPointMake(KScreenWidth * (self.pageControl.currentPage + 1), 0) animated:NO];
    }
}

上面這種方法,可能在圖片比較多的時候,沒有下面這種方法好,而且動畫也不如下面這種
2.第二種方法是創(chuàng)建3個ImageView
設置ImageView

- (void)setUpImageView{
    self.leftImage = [[UIImageView alloc]init];
    self.leftImage.image = [UIImage imageNamed:[_arrayImage lastObject]];
    [self.scrollView addSubview:self.leftImage];
    
    self.centerImage = [[UIImageView alloc]init];
    self.centerImage.image = [UIImage imageNamed:_arrayImage[0]];
    [self.scrollView addSubview:self.centerImage];
    
    self.rightImage = [[UIImageView alloc]init];
    self.rightImage.image = [UIImage imageNamed:_arrayImage[1]];
    [self.scrollView addSubview:self.rightImage];
}

注意:scrollView的contentSize的設置

self.scrollView.contentSize = CGSizeMake(3 * KScreenWidth, 0);
[self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];

設置刷新圖片

- (void)reloadImage{
    NSInteger page = self.scrollView.contentOffset.x / KScreenWidth;
    if (page == 0)
    {
        _currentPage = ((_currentPage - 1 + _arrayImage.count) % [_arrayImage count]);
        _leftImage.image = [UIImage imageNamed:_arrayImage[(_currentPage - 1 + _arrayImage.count) % _arrayImage.count]];
        _centerImage.image = [UIImage imageNamed:_arrayImage[_currentPage]];
        _rightImage.image = [UIImage imageNamed:_arrayImage[(_currentPage + 1 + _arrayImage.count ) % _arrayImage.count]];
    }else if (page == 2){
        _currentPage = (_currentPage + 1) % _arrayImage.count;
        _leftImage.image = [UIImage imageNamed:_arrayImage[(_currentPage - 1 ) % _arrayImage.count]];
        _centerImage.image = [UIImage imageNamed:_arrayImage[_currentPage]];
        _rightImage.image = [UIImage imageNamed:_arrayImage[(_currentPage + 1 ) % _arrayImage.count]];
    }
    [self.scrollView setContentOffset:CGPointMake(KScreenWidth, 0) animated:NO];
}

UIScrollView的代理方法與定時器的圖片動畫

- (void)nextImage{
    [UIView animateWithDuration:1.0 animations:^{
        _scrollView.contentOffset = CGPointMake(KScreenWidth * 2, 0);
    } completion:^(BOOL finished) {
        [self reloadImage];
    }];
    NSInteger page = self.pageControl.currentPage;
    if (page == _arrayImage.count - 1) {
        self.pageControl.currentPage = 0;
    }else{
    self.pageControl.currentPage = _currentPage + 1;
    }
}
#pragma mark ----UIScrollViewDelegate代理方法(停止加速時調用)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    [self reloadImage];
    self.scrollView.contentOffset = CGPointMake(KScreenWidth,0);
    self.pageControl.currentPage = _currentPage;
    NSLog(@"停止了加速,停在第%ld頁",self.pageControl.currentPage + 1);
}

全部的代碼都已經貼出來了,爸媽再也不用擔心我不會使用圖片輪播了,謝謝大家!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,432評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,213評論 25 708
  • 放下暫時的工作,寥寥草草寫了請假條。收拾好行李,帶上一件長裙和一個碎花坎肩,因為她是怕冷的。她記得一定帶上miro...
    卓倪閱讀 221評論 4 0
  • 我們都想當戀愛中的小女人,都向往怦然心動就可以廝守一生的愛情,無一例外。 01 劉阿卡認為她的童年給過她太多...
    空持羅帶閱讀 506評論 2 2
  • 又是一年開學季,托著箱子挽著父母的新生,拿著洗漱籃剛洗澡回來的學姐,抱著籃球三五成群的學長,甜蜜的拉著小手的情侶,...
    盛夏桐悅閱讀 523評論 1 2

友情鏈接更多精彩內容