無限輪播圖片的實現原理,輪播圖片原理

來源:互聯網
上載者:User

無限輪播圖片的實現原理,輪播圖片原理

無限輪播圖相信是很多開發人員常用的一個功能,這裡總結一下常用的兩種方式的實現原理

一、使用UIScrollview實現無限輪播  用UIScrollView實現,在scrollView上添加3個UIImageView,分別用來顯示上一張圖片,當前顯示的圖片,下一張圖片。scrollView在不滑動的時候永遠顯示當前圖片(第二張圖片)即contentOffset = CGPointMake(scrollViewW,0),在滑動的時候可以預覽部分上一張圖片或下一張圖片。現在以向左滑動為例,因為已經設定好三張圖片,我們向左滑動可以看到下一張圖片的一部分(此時螢幕顯示著部分當前圖片和部分下一張圖片)。如果完成了向左滑動,在UIScrollView的代理方法 scrollViewDidEndDecelerating:裡 將三個UIImageView上顯示的圖片更換(下標一次+1),此時第二個imageView顯示的就是之前的第三個imageView上的圖片,最後將scrollView的位移量拉回到第二張圖片上[scrollView setContentOffset:CGPointMake(bannerScrollViewW, 0) animated:NO]                

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    NSInteger leftIndex;

    NSInteger rightIndex;

    if (scrollView.contentOffset.x == bannerScrollViewW * 2) {

        /** 向左滑  計算 左 中 右 的下標索引*/

        leftIndex = self.centerIndex % self.imageNames.count;

        self.centerIndex = (self.centerIndex+1) % self.imageNames.count;

        rightIndex = (self.centerIndex +1) % self.imageNames.count;

        //NSLog(@"往左滑");

    }else if (scrollView.contentOffset.x == 0) {

        /** 向右滑  計算 左 中 右 的下標索引*/

        rightIndex = self.centerIndex;

        self.centerIndex = (self.centerIndex - 1) < 0?(self.imageNames.count - 1):(self.centerIndex - 1);

        leftIndex = (self.centerIndex - 1) < 0?(self.imageNames.count - 1):(self.centerIndex - 1);

        //NSLog(@"往右滑");

    }else{

        // 沒有滑走 什麼都不做,直接return

        return;

    }

    /** 設定圖片 */

    self.leftImageView.image = [UIImage imageNamed:self.imageNames[leftIndex]];

    self.centerImageView.image = [UIImage imageNamed:self.imageNames[self.centerIndex]];

    self.rightImageView.image = [UIImage imageNamed:self.imageNames[rightIndex]];

    /** 設定pageControl currentPage  因為永遠顯示中間的圖片,故此currentPage=centerIndex */

    self.pageControl.currentPage = self.centerIndex;

    // 將 bannerScrollView 拉回到中間圖片的位置 顯示圖片

    [scrollView setContentOffset:CGPointMake(bannerScrollViewW, 0) animated:NO];

}

二、使用UICollectionView實現無限輪播  N張照片把contentsSize設定為N+2個圖片的寬度,例子如下,兩端填充,當處於一端時,且即將進入迴圈狀態的時候,如第二張圖,從狀態1滑動到狀態2,在滑動結束的時候,將當前的位置直接轉到狀態3,直接setContentOffset神不知鬼不覺,視覺上是迴圈的。注意:這裡不能使用 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;當我們滑動cell是是無法觸發這個函數的,雖然它是動畫結束後就可以觸發,但是它指的動畫是系統原生動畫,如我們的手動滑動是無法觸發該函數的。  總結源自:  http://www.jianshu.com/p/7123a07cc552

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.