欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

iOS如何實現(xiàn)無限循環(huán)輪播圖效果-創(chuàng)新互聯(lián)

這篇文章主要介紹了iOS如何實現(xiàn)無限循環(huán)輪播圖效果,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計,米脂網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:米脂等地區(qū)。米脂做網(wǎng)站價格咨詢:13518219792

本文實例為大家分享了iOS實現(xiàn)無限循環(huán)輪播圖的具體代碼,供大家參考,具體內(nèi)容如下

輪播圖基礎(chǔ)控件,左滑右滑都能無限循環(huán)

預(yù)覽

iOS如何實現(xiàn)無限循環(huán)輪播圖效果

思路

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

iOS如何實現(xiàn)無限循環(huán)輪播圖效果

#pragma mark - pagecontrol事件
// 這個是點擊小圓點條進(jìn)行切換,到邊不能循環(huán)
- (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
 {
 // 右滑
 
 // 設(shè)置小點
 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);
 }
 
 }
 // 結(jié)束后又開啟定時器
 [self.kvTimer setFireDate:[NSDate dateWithTimeInterval:kTimerInterval sinceDate:[NSDate date]]];
}
 
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
// printf("end scroll\n");
}
 
#pragma mark - 定時器控制的滑動
// 往右邊滑
- (void)changePageRight
{
 // 設(shè)置當(dāng)前需要偏移的量,每次遞增一個page寬度
 CGFloat offsetX = _scrollView.contentOffset.x + CGRectGetWidth(self.frame);
 
 // 根據(jù)情況進(jìn)行偏移
 CGFloat edgeOffsetX = self.frame.size.width * (_pageCount + 1); // 最后一個多余頁面右邊緣偏移量
 
 // 從多余頁往右邊滑,趕緊先設(shè)置為第一頁的位置
 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)
 {
 // 最后的多余那一頁滑過去之后設(shè)置小點為第一個
 self.pageControl.currentPage = 0;
 }
}
 
// 往左邊滑
- (void)changePageLeft
{
 // 設(shè)置當(dāng)前需要偏移的量,每次遞減一個page寬度
 CGFloat offsetX = _scrollView.contentOffset.x - CGRectGetWidth(self.frame);
 
 // 根據(jù)情況進(jìn)行偏移
 CGFloat edgeOffsetX = 0; // 最后一個多余頁面左邊緣偏移量
 
 // 從多余頁往左邊滑動,先設(shè)置為最后一頁
 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)
 {
 // 最后的多余那一頁滑過去之后設(shè)置小點為最后一個
 self.pageControl.currentPage = _pageCount - 1;
 }
}

(2)總共只有左、中、右三個頁面,每次滑動后重新進(jìn)行數(shù)據(jù)跟頁面的關(guān)聯(lián)

iOS如何實現(xiàn)無限循環(huán)輪播圖效果

#pragma mark - 定時器回調(diào)
- (void)changePageRight
{
 // 往右滑并且設(shè)置小圓點,永遠(yuǎn)都是滑到第三頁
 [_scrollView setContentOffset:CGPointMake(self.frame.size.width * 2, 0) animated:YES];
 [self resetPageIndex:YES];
}
 
- (void)changePageLeft
{
 // 往左滑,永遠(yuǎn)都是滑動到第一頁
 [_scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
 [self resetPageIndex:NO];
}
 
#pragma mark - 重新設(shè)置索引和頁面圖片
- (void)resetPageIndex:(BOOL)isRight
{
 if (isRight)
 {
 // 根據(jù)之前的page下標(biāo)來修改
 if (_prePageIndex == _pageCount - 1)
 {
  // 到頭了就回到第一個
  _pageControl.currentPage = 0;
 }
 else
 {
  // 這里用_prePageIndex來算,否則點擊小圓點條會重復(fù)計算了
  _pageControl.currentPage = _prePageIndex + 1;
 }
 }
 else
 {
 if (_prePageIndex == 0)
 {
  _pageControl.currentPage = _pageCount - 1;
 }
 else
 {
  _pageControl.currentPage = _prePageIndex - 1;
 }
 }
 _prePageIndex = _pageControl.currentPage;
}
 
- (void)resetPageView
{
 // 每次滑動完了之后又重新設(shè)置當(dāng)前顯示的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];
 }
 
 // 重新設(shè)置偏移量
 _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
{
 // 手動拖拽滑動結(jié)束后
 if (scrollView.contentOffset.x > self.frame.size.width)
 {
 // 右滑
 [self resetPageIndex:YES];
 }
 else
 {
 // 左滑
 [self resetPageIndex:NO];
 }
 [self resetPageView];
 
 // 開啟定時器
 [self startTimer];
}
 
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
 // 自動滑動結(jié)束后重新設(shè)置圖片
 [self resetPageView];
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“iOS如何實現(xiàn)無限循環(huán)輪播圖效果”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:iOS如何實現(xiàn)無限循環(huán)輪播圖效果-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://chinadenli.net/article18/dhgsgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、關(guān)鍵詞優(yōu)化、服務(wù)器托管、品牌網(wǎng)站設(shè)計、定制開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司