亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

UICollectionView的無限滾動---妥協做法

發布時間:2020-06-24 23:32:34 來源:網絡 閱讀:2403 作者:yunsankai 欄目:開發技術

    項目中總有寫比較變態的需求,我們的UI設計師有喜歡很酷的交互,其中有個需求類似這種的


        UICollectionView的無限滾動---妥協做法

    右側部分是可以滾動的當然是無限滾動,這中效果只有UICollectionView的自定義布局才能實現,重寫Layout的幾個方法主要的代碼就是給UICollectionViewLayoutAttributes的屬性賦值,主要是為這幾個center,size, transform3D;屬性賦值,主要使用的是AWCollectionViewDialLayout這個三方的布局。

    但是,這個三方并沒有實現無限滾動的。無限滾動也可以在scrollViewDidScroll:方法中進行檢測,開頭和結尾地方多添加幾個元素,如果到最后一個了重新回到第一個,但是這種實現有很強的卡頓感,所以后來放棄了這個。后來,在github找到了一種辦法,自定義拖拽手勢UIPanGestureRecognizer

,然后再拖拽手勢的target,action方法中進行判斷如果狀態來更改UICollectionView的偏移量,代碼如下

- (void)customPan:(UIPanGestureRecognizer *)sender {
        if (sender.state == UIGestureRecognizerStateBegan) {
            self.oldOffset = self.collectionView.contentOffset;
        }
        
        if (sender.state == UIGestureRecognizerStateChanged) {
            CGPoint translation = [sender translationInView:self.collectionView];
            CGPoint offset;
            offset.y = (self.oldOffset.y - translation.y);
            if (fabsf(translation.y)>30) {
                [self.collectionView setContentOffset:offset animated:NO];
            }
        }
        
        if (sender.state == UIGestureRecognizerStateEnded) {
            CGPoint translation = [sender translationInView:self.collectionView];
            self.previousCell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:self.centerItem inSection:0]];
            NSInteger step = 1;
            step = abs(translation.y/item_height)+1;//計算需要走幾步
            
            if (translation.y > 0) {////向上滑動
                if (translation.y > (item_height/2+10)) {
                    if ((0 < self.centerItem) && (self.centerItem <= (self.count - step))) {
                        self.centerItem -= step;
                    }
                }
                
            } else if (translation.y < 0){//向下滑動
                if (abs(translation.y)>(item_height/2+10)) {
                    if ((0 <= self.centerItem) && (self.centerItem < self.count - step)) {
                        self.centerItem += step;
                    }
                }
            }
            [self.collectionView setContentOffset:CGPointMake(0, self.centerItem*item_height) animated:YES];
        }
        
        }

    然后再滾動視圖的scrollViewDidEndScrollingAnimation:的代理方法中來判斷視圖的偏移量如果到首部或者尾部就重新設置UICollectionView的偏移量,這樣沒有絲毫的卡頓感了,但是卻有個很大的缺陷,自定義的手勢沒有是減速的,最多有個滾動結束時的動畫。

    UICollectionView的無限滾動的方法我找了很長時間一直沒有找到很理想的方法,所以這種只能算是個妥協的方法。

向AI問一下細節

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

AI

平昌县| 德江县| 全州县| 故城县| 锡林浩特市| 土默特左旗| 肃南| 随州市| 南昌市| 信丰县| 巴马| 通渭县| 乐业县| 丰宁| 渑池县| 大埔区| 永修县| 札达县| 阿合奇县| 宜兴市| 巴彦淖尔市| 大关县| 晴隆县| 城市| 紫阳县| 大方县| 石阡县| 灌阳县| 太仆寺旗| 周宁县| 台南县| 佛冈县| 项城市| 克拉玛依市| 平舆县| 买车| 海南省| 巴彦县| 大埔县| 贵南县| 克东县|