亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現無限循環輪播圖效果

2019-10-21 18:40:16
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS實現無限循環輪播圖的具體代碼,供大家參考,具體內容如下

輪播圖基礎控件,左滑右滑都能無限循環

預覽

iOS,輪播圖

思路

(1)在第一張左邊加一張最后一張的圖片,往左滑到邊緣結束后計算偏移量迅速定位成最后一張

iOS,輪播圖

#pragma mark - pagecontrol事件// 這個是點擊小圓點條進行切換,到邊不能循環- (void)pageControlTouched{ // 點擊的時候停止計時 [self.kvTimer setFireDate:[NSDate distantFuture]];  // 滑到指定頁面 NSInteger curPageIdx = _pageControl.currentPage; CGFloat offsetX = self.frame.size.width * (curPageIdx + 1); [self.scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];  // 重新開啟定時器 [self.kvTimer setFireDate:[NSDate dateWithTimeInterval:kTimerInterval sinceDate:[NSDate date]]];} #pragma mark - 滾動事件- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{// printf("start drag/n"); // 記錄偏移量 preOffsetX = scrollView.contentOffset.x; // 開始手動滑動時暫停定時器 [self.kvTimer setFireDate:[NSDate distantFuture]];} - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{// printf("end drag/n"); // 左右邊界 CGFloat leftEdgeOffsetX = 0; CGFloat rightEdgeOffsetX = self.frame.size.width * (_pageCount + 1);  if (scrollView.contentOffset.x < preOffsetX) {  // 左滑  if (scrollView.contentOffset.x > leftEdgeOffsetX)  {   self.pageControl.currentPage = scrollView.contentOffset.x / self.frame.size.width - 1;  }  else if (scrollView.contentOffset.x == leftEdgeOffsetX)  {   self.pageControl.currentPage = _pageCount - 1;  }    if (scrollView.contentOffset.x == leftEdgeOffsetX)  {   self.scrollView.contentOffset = CGPointMake(self.frame.size.width * _pageCount, 0);  } } else {  // 右滑    // 設置小點  if (scrollView.contentOffset.x < rightEdgeOffsetX)  {   self.pageControl.currentPage = scrollView.contentOffset.x / self.frame.size.width - 1;  }  else if (scrollView.contentOffset.x == rightEdgeOffsetX)  {   self.pageControl.currentPage = 0;  }    // 滑動完了之后從最后多余頁趕緊切換到第一頁  if (scrollView.contentOffset.x == rightEdgeOffsetX)  {   self.scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);  }  } // 結束后又開啟定時器 [self.kvTimer setFireDate:[NSDate dateWithTimeInterval:kTimerInterval sinceDate:[NSDate date]]];} - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{// printf("end scroll/n");} #pragma mark - 定時器控制的滑動// 往右邊滑- (void)changePageRight{ // 設置當前需要偏移的量,每次遞增一個page寬度 CGFloat offsetX = _scrollView.contentOffset.x + CGRectGetWidth(self.frame);  // 根據情況進行偏移 CGFloat edgeOffsetX = self.frame.size.width * (_pageCount + 1); // 最后一個多余頁面右邊緣偏移量  // 從多余頁往右邊滑,趕緊先設置為第一頁的位置 if (offsetX > edgeOffsetX) {  // 偏移量,不帶動畫,欺騙視覺  self.scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);  // 這里提前改變下一個要滑動到的位置為第二頁  offsetX = self.frame.size.width * 2; }  // 帶動畫滑動到下一頁面 [self.scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES]; if (offsetX < edgeOffsetX) {  self.pageControl.currentPage = offsetX / self.frame.size.width - 1; } else if (offsetX == edgeOffsetX) {  // 最后的多余那一頁滑過去之后設置小點為第一個  self.pageControl.currentPage = 0; }} // 往左邊滑- (void)changePageLeft{ // 設置當前需要偏移的量,每次遞減一個page寬度 CGFloat offsetX = _scrollView.contentOffset.x - CGRectGetWidth(self.frame);  // 根據情況進行偏移 CGFloat edgeOffsetX = 0; // 最后一個多余頁面左邊緣偏移量  // 從多余頁往左邊滑動,先設置為最后一頁 if (offsetX < edgeOffsetX) {  self.scrollView.contentOffset = CGPointMake(self.frame.size.width * _pageCount, 0);  offsetX = self.frame.size.width * (_pageCount - 1); }  // 帶動畫滑動到前一頁面 [self.scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES]; if (offsetX > edgeOffsetX) {  self.pageControl.currentPage = offsetX / self.frame.size.width - 1; } else if (offsetX == edgeOffsetX) {  // 最后的多余那一頁滑過去之后設置小點為最后一個  self.pageControl.currentPage = _pageCount - 1; }}

(2)總共只有左、中、右三個頁面,每次滑動后重新進行數據跟頁面的關聯

iOS,輪播圖

#pragma mark - 定時器回調- (void)changePageRight{ // 往右滑并且設置小圓點,永遠都是滑到第三頁 [_scrollView setContentOffset:CGPointMake(self.frame.size.width * 2, 0) animated:YES]; [self resetPageIndex:YES];} - (void)changePageLeft{ // 往左滑,永遠都是滑動到第一頁 [_scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; [self resetPageIndex:NO];} #pragma mark - 重新設置索引和頁面圖片- (void)resetPageIndex:(BOOL)isRight{ if (isRight) {  // 根據之前的page下標來修改  if (_prePageIndex == _pageCount - 1)  {   // 到頭了就回到第一個   _pageControl.currentPage = 0;  }  else  {   // 這里用_prePageIndex來算,否則點擊小圓點條會重復計算了   _pageControl.currentPage = _prePageIndex + 1;  } } else {  if (_prePageIndex == 0)  {   _pageControl.currentPage = _pageCount - 1;  }  else  {   _pageControl.currentPage = _prePageIndex - 1;  } } _prePageIndex = _pageControl.currentPage;} - (void)resetPageView{ // 每次滑動完了之后又重新設置當前顯示的page時中間的page UIImageView *leftPage = [_scrollView viewWithTag:1000]; UIImageView *middlePage = [_scrollView viewWithTag:1001]; UIImageView *rightPage = [_scrollView viewWithTag:1002];  if (_pageControl.currentPage == _pageCount - 1) {  // n- 1 -> n -> 0  leftPage.image = _kvImageArray[_pageControl.currentPage - 1];  middlePage.image = _kvImageArray[_pageControl.currentPage];  rightPage.image = _kvImageArray.firstObject;   } else if (_pageControl.currentPage == 0) {  // n -> 0 -> 1  // 到尾部了,改成從頭開始  leftPage.image = _kvImageArray.lastObject;  middlePage.image = _kvImageArray.firstObject;  rightPage.image = _kvImageArray[1]; } else {  // x - 1 -> x -> x + 1  leftPage.image = _kvImageArray[_pageControl.currentPage - 1];  middlePage.image = _kvImageArray[_pageControl.currentPage];  rightPage.image = _kvImageArray[_pageControl.currentPage + 1]; }  // 重新設置偏移量 _scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);} #pragma mark - pagecontrol事件- (void)pageControlTouched{ [self stopTimer];  NSInteger curPageIndex = _pageControl.currentPage; if (curPageIndex > _prePageIndex) {  // 右滑  [self changePageRight]; } else {  // 左滑  [self changePageLeft]; }  [self startTimer];} #pragma mark - scrollview滑動代理- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ // 先停掉定時器 [self stopTimer]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ // 手動拖拽滑動結束后 if (scrollView.contentOffset.x > self.frame.size.width) {  // 右滑  [self resetPageIndex:YES]; } else {  // 左滑  [self resetPageIndex:NO]; } [self resetPageView];  // 開啟定時器 [self startTimer];} - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ // 自動滑動結束后重新設置圖片 [self resetPageView];}

源代碼下載

csdn:輪播圖
github:輪播圖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91欧美视频网站| 精品国产户外野外| 亚洲国产精品热久久| 中文字幕日韩精品在线| 91香蕉电影院| 中文字幕一区二区精品| 欧美激情中文字幕在线| 国产一区二区免费| 亚洲天堂av在线播放| 欧美激情视频给我| 久久大大胆人体| 日韩在线播放视频| 午夜精品久久久久久久白皮肤| 91精品国产综合久久男男| 91精品国产综合久久久久久久久| 欧美天堂在线观看| 国产日韩欧美成人| 亚洲最大激情中文字幕| 成人精品一区二区三区| 欧美日韩福利在线观看| 久久免费成人精品视频| 亚洲欧洲在线看| 欧美性理论片在线观看片免费| 精品一区二区三区四区在线| 欧美黄色片在线观看| 成人做爽爽免费视频| 亚洲直播在线一区| 一本色道久久88亚洲综合88| 亚洲精品小视频在线观看| 免费97视频在线精品国自产拍| 国产精品欧美激情| 日韩免费中文字幕| 国产精品成人av在线| 午夜精品一区二区三区在线视| 国产一区二区色| 日韩欧美一区二区三区| 国产精品网红福利| 亚洲国产精品悠悠久久琪琪| 欧美日韩性视频在线| 精品成人久久av| 日韩a**中文字幕| 亚洲激情免费观看| 一本色道久久88精品综合| 亚洲精品小视频在线观看| 中文字幕亚洲欧美日韩高清| 97国产精品视频| 日韩一区二区福利| 欧美成人网在线| 九九视频这里只有精品| 国产三级精品网站| 欧美成人三级视频网站| 欧美成人午夜激情在线| 日本不卡高字幕在线2019| 中文字幕国产日韩| 日本欧美黄网站| 国产欧亚日韩视频| 91久久国产综合久久91精品网站| 国产精品久久久久aaaa九色| 国产性猛交xxxx免费看久久| 国产精品va在线播放| 韩国视频理论视频久久| 成人美女免费网站视频| 国产91色在线免费| 亚洲欧洲成视频免费观看| 欧美精品手机在线| 久久久久中文字幕| 亚洲码在线观看| www.亚洲一二| 亚洲国产精品久久91精品| 国产日韩精品在线播放| 亚洲一区二区三区四区在线播放| 亚洲电影在线观看| 91tv亚洲精品香蕉国产一区7ujn| 伊人一区二区三区久久精品| 国产精品美女www爽爽爽视频| 国产激情999| 亚洲精品成人久久| 日韩美女在线看| 日韩在线观看精品| 欧美日韩xxxxx| 日韩欧美在线网址| 国产一区二区三区在线播放免费观看| 欧美成人激情视频免费观看| 日韩av在线精品| 欧美中在线观看| 国产精品视频公开费视频| 尤物精品国产第一福利三区| 亚洲视频网站在线观看| 91精品国产色综合久久不卡98口| 亚洲精品永久免费精品| 色综合久久久久久中文网| 91麻豆国产精品| 欧美日韩成人精品| 欧美精品性视频| 国产精品一区二区av影院萌芽| 亚洲情综合五月天| 国产精品羞羞答答| 国产精品www色诱视频| 国产精品激情自拍| 亚洲天堂男人天堂女人天堂| 亚洲国产成人精品久久久国产成人一区| 亚洲第一综合天堂另类专| 91最新在线免费观看| 久久久久国产精品一区| 另类天堂视频在线观看| 亚洲午夜性刺激影院| 影音先锋欧美在线资源| 亚洲综合第一页| 性欧美暴力猛交69hd| 国产日本欧美视频| 欧美大片网站在线观看| 欧美另类在线观看| 色妞欧美日韩在线| 日韩精品在线免费观看视频| 欧洲成人午夜免费大片| 亚洲激情第一页| 91精品在线一区| 色悠悠久久久久| 亚洲欧美变态国产另类| 亚洲理论电影网| 久久久久久美女| 久久久久久91香蕉国产| 2019中文字幕全在线观看| 精品无人国产偷自产在线| 91福利视频网| 亚洲午夜av电影| 国产成人精品999| 欧美日韩国产综合新一区| 亚洲色图35p| 国产精品91久久久久久| 亚洲性无码av在线| 欧美激情奇米色| 久久婷婷国产麻豆91天堂| 日本国产精品视频| 国产亚洲成精品久久| 成人国产精品久久久| 精品二区三区线观看| 最新中文字幕亚洲| 欧美亚洲成人精品| 国产成人一区二区三区电影| 国产精品一香蕉国产线看观看| 国产精品激情自拍| 日韩hd视频在线观看| 91亚洲精品久久久| 久久久久久久亚洲精品| 九色精品美女在线| 国产精品欧美激情在线播放| 精品国产一区二区三区久久狼5月| 97精品久久久中文字幕免费| 亚洲人成电影在线| 国产啪精品视频| 欧美在线观看网址综合| 国产精品网站视频| 岛国av一区二区三区| 久久久女人电视剧免费播放下载| 久久99久久99精品中文字幕| 狠狠综合久久av一区二区小说| www.欧美三级电影.com| 欧美天天综合色影久久精品| 色综合男人天堂| 久久久精品免费| 91精品国产91久久久久久| 亚洲精品电影在线观看| 国产日韩在线精品av|