91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pageControl頁碼實時更新的實現

發布時間:2020-07-18 22:59:10 來源:網絡 閱讀:759 作者:zlayne 欄目:開發技術

        iOS開發過程中會經常遇到scrollView與pageControl混合使用的情況。scrollView與pageControl的配合邏輯代碼一般是寫在以下代理函數中的:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

即在scrollView滾動結束時pageControl才會更新代碼,這樣可以防止pageControl頁碼的邏輯混亂。但這同樣會出現一個問題,那就是在用戶快速滑動scrollView的時候,pageControl的頁碼無法更新,在用戶看來就是scrollVIew在滑動,而頁碼無變化。其實解決的方法很簡單,原理就是將pageControl的頁碼更新放到以下代理函數中即可:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

這個函數會在scrollView滑動過程中不斷被調用,將pageControl的頁碼更新操作放在這個函數里執行即可獲得頁碼實時更新的效果。代碼如下:

//scrollView滑動結束時調用
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    if(_p_w_picpathScrollView.contentOffset.x >= (totalPage-1.5)*_p_w_picpathScrollView.width){
        [_p_w_picpathScrollView setContentOffset:CGPointMake(_p_w_picpathScrollView.width, 0) animated:NO];
    }else if(_p_w_picpathScrollView.contentOffset.x<0.5*_p_w_picpathScrollView.width){
        [_p_w_picpathScrollView setContentOffset:CGPointMake((totalPage-2)*_p_w_picpathScrollView.width, 0) animated:NO];
    }
    NSInteger currentPage = roundf((_p_w_picpathScrollView.contentOffset.x-_p_w_picpathScrollView.width) / [self getWidth]);
    _pageControl.currentPage = currentPage;
}


//scrollView滑動過程中多次調用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSInteger currentPage;
    if(_p_w_picpathScrollView.contentOffset.x >= (totalPage-1.5)*_p_w_picpathScrollView.width) {
        currentPage = roundf((_p_w_picpathScrollView.contentOffset.x-_p_w_picpathScrollView.width) / [self getWidth]) - (totalPage-2);
    }else if(_p_w_picpathScrollView.contentOffset.x<0.5*_p_w_picpathScrollView.width){
        // 設置當前頁
        currentPage = roundf((_p_w_picpathScrollView.contentOffset.x-_p_w_picpathScrollView.width) / [self getWidth]) + (totalPage-2);
    }else{
        currentPage = roundf((_p_w_picpathScrollView.contentOffset.x -_p_w_picpathScrollView.width) / [self getWidth]);
    }
    _pageControl.currentPage = currentPage;
}

需要說明的幾點:

1、這個scrollView是根據需求“banner需要能夠循環滑動”而設置的,原理如下:

(1)有三個主要的數據view,分別為view1,view2,view3,這三個是真正要顯示的數據view。為了實現“循環效果”,另外定義了兩個輔助view(view1_fz和view3_fz),在scrollView中的排列順序如下圖所示:

pageControl頁碼實時更新的實現

(2)在右滑至View1_fz的位置時,通過setContentOffset將_p_w_picpathScrollView移到View1的位置,并關閉動畫效果。在左滑至View3_fz的位置時,通過setContentOffset將_p_w_picpathScrollView移到View3的位置,并關閉動畫效果。

這樣就實現了循環的效果。

2、這里的totalPage指的是所有的view個數,包括輔助的view,即totalPage=5。

3、通過contentOffset的值計算當前頁碼currentPage。

4、這里的“翻頁”是以view的一半寬度為標準的,即scrollView翻頁超過了下一頁的一半時currentPage顯示為下一頁。

5、為了實現pageControl的實時更新效果,在scrollViewDidScroll中對currentPage實時進行計算。

6、為了防止頁碼的錯誤,在scrollViewDidEndDecelerating函數中依然保留一次對currentPage的最終計算。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

留坝县| 金乡县| 独山县| 敖汉旗| 虞城县| 定南县| 泗水县| 乌拉特前旗| 清镇市| 广宁县| 平原县| 辽源市| 昌宁县| 苍梧县| 靖宇县| 开远市| 嫩江县| 屯门区| 南陵县| 大同市| 莱阳市| 永福县| 山阳县| 印江| 通榆县| 鹤峰县| 赤水市| 梧州市| 琼结县| 北流市| 庆云县| 盖州市| 临汾市| 云南省| 方城县| 九台市| 都江堰市| 信宜市| 苏尼特左旗| 时尚| 内黄县|