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

首頁 > 系統 > iOS > 正文

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

2020-07-26 02:25:16
字體:
來源:轉載
供稿:網友

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

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

預覽

思路

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

#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)總共只有左、中、右三個頁面,每次滑動后重新進行數據跟頁面的關聯

#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:輪播圖

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
人人做人人澡人人爽欧美| 国产日韩欧美中文| 国产精品mp4| 91精品在线一区| 91成人在线播放| 欧美黑人性视频| 欧美激情亚洲国产| 国产欧美精品在线播放| 日韩欧美国产激情| 欧美色道久久88综合亚洲精品| 2019亚洲男人天堂| 亚洲精品影视在线观看| 欧美精品九九久久| 色999日韩欧美国产| 国产成人精品综合久久久| 日本久久久久亚洲中字幕| 欧美专区在线观看| 成人久久久久久| 欧美一区二区三区四区在线| 欧美国产日韩一区二区三区| 日韩免费av在线| 国产成人小视频在线观看| 国产在线拍揄自揄视频不卡99| 日韩av理论片| 日韩在线观看网站| 欧美成人一区在线| 国产精品视频26uuu| 亚洲精品日韩激情在线电影| 性色av一区二区三区红粉影视| 欧美日韩在线视频观看| 韩国一区二区电影| 亚洲精品成人久久电影| 日韩精品视频观看| 久精品免费视频| 91极品视频在线| 成人激情黄色网| 超碰日本道色综合久久综合| 亚洲成人av中文字幕| 中文字幕一区二区精品| 97久久久免费福利网址| 亚洲美女在线观看| 5252色成人免费视频| 亚洲缚视频在线观看| 精品久久久久久久久国产字幕| 国内精品久久久久久| 欧美成aaa人片免费看| 国产日本欧美一区二区三区| 福利一区福利二区微拍刺激| 亚洲国产精品久久久久| 亚洲色图13p| 激情久久av一区av二区av三区| 日韩免费看的电影电视剧大全| 欧美日韩在线视频首页| 一区二区欧美在线| 日韩美女毛茸茸| 精品国产乱码久久久久酒店| 中文日韩电影网站| 国产精品视频公开费视频| 97久久精品人搡人人玩| 亚洲电影免费观看高清完整版在线| 精品免费在线观看| 26uuu久久噜噜噜噜| 在线观看不卡av| 久久成人免费视频| 成人国产亚洲精品a区天堂华泰| 国产精品吴梦梦| 国产精品青草久久久久福利99| 欧美美女15p| 最近2019年手机中文字幕| 成人在线激情视频| 国产午夜精品一区二区三区| 色偷偷偷综合中文字幕;dd| 91精品国产电影| 一本一本久久a久久精品综合小说| 5278欧美一区二区三区| 国产亚洲精品成人av久久ww| 日韩免费观看av| 亚洲一区二区三| 91在线播放国产| 欧美国产一区二区三区| 日本久久久久久| 91av在线播放| 91精品久久久久久久久久久久久| 久久中文久久字幕| 久久青草福利网站| 午夜精品国产精品大乳美女| 欧美日韩成人黄色| 亚洲第一色在线| 亚洲第一精品福利| 日韩精品极品毛片系列视频| 中文欧美日本在线资源| 久久久精品2019中文字幕神马| 日韩网站免费观看高清| 国产精品观看在线亚洲人成网| 欧美高清视频在线| 欧美黄色片免费观看| 亚洲一品av免费观看| 久久久久国产精品免费网站| 国产美女精彩久久| 91av在线播放视频| 日韩精品999| 久国内精品在线| 日本一欧美一欧美一亚洲视频| 欧美日韩亚洲网| 午夜精品美女自拍福到在线| 亚洲免费一级电影| 久久久久久久一| 欧日韩不卡在线视频| 国产成人久久久| 91禁国产网站| 欧洲精品毛片网站| 日韩av片永久免费网站| 91视频88av| 欧美国产精品va在线观看| 欧美日韩国产成人| 国外成人性视频| 午夜精品三级视频福利| 日韩中文娱乐网| 影音先锋日韩有码| 亚洲xxxx3d| 久久久久久中文| 国产欧美在线播放| 国产日韩精品一区二区| 色伦专区97中文字幕| 亚洲中国色老太| 久久久久久久激情视频| 夜夜嗨av一区二区三区四区| 国模视频一区二区三区| 亚洲网站视频福利| 欧美电影免费观看| 日韩二区三区在线| 亚洲欧美日韩区| 亚洲精品国产精品乱码不99按摩| 国产精品久久久久久久久久三级| 97免费中文视频在线观看| 国产色视频一区| 亚洲缚视频在线观看| 国产精品自产拍在线观看| 亚洲国产中文字幕在线观看| 人人爽久久涩噜噜噜网站| 日韩国产中文字幕| 国产精品 欧美在线| 国产成人在线精品| 精品日本高清在线播放| 日韩av免费在线| 国产精品视频中文字幕91| 97视频在线观看免费高清完整版在线观看| 欧美成人亚洲成人| 国产女精品视频网站免费| 九九视频这里只有精品| 国产日韩亚洲欧美| 精品国产91久久久久久| 国产成人综合一区二区三区| 日韩国产欧美精品一区二区三区| 亚洲影院高清在线| 久久久久久久久国产精品| 2023亚洲男人天堂| 亚洲电影免费观看高清完整版在线| 亚洲国产精品电影在线观看| 日韩性生活视频| 高清欧美性猛交| 97婷婷大伊香蕉精品视频| 色哟哟亚洲精品一区二区| 欧美电影第一页|