項目中總有寫比較變態的需求,我們的UI設計師有喜歡很酷的交互,其中有個需求類似這種的
右側部分是可以滾動的當然是無限滾動,這中效果只有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的無限滾動的方法我找了很長時間一直沒有找到很理想的方法,所以這種只能算是個妥協的方法。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網頁題目:UICollectionView的無限滾動---妥協做法-創新互聯
當前鏈接:http://m.newbst.com/article16/dceggg.html
成都網站建設公司_創新互聯,為您提供響應式網站、網站設計公司、外貿建站、網頁設計公司、App設計、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯