項(xiàng)目中總有寫比較變態(tài)的需求,我們的UI設(shè)計(jì)師有喜歡很酷的交互,其中有個(gè)需求類似這種的
右側(cè)部分是可以滾動(dòng)的當(dāng)然是無(wú)限滾動(dòng),這中效果只有UICollectionView的自定義布局才能實(shí)現(xiàn),重寫Layout的幾個(gè)方法主要的代碼就是給UICollectionViewLayoutAttributes的屬性賦值,主要是為這幾個(gè)center,size, transform3D;屬性賦值,主要使用的是AWCollectionViewDialLayout這個(gè)三方的布局。
但是,這個(gè)三方并沒(méi)有實(shí)現(xiàn)無(wú)限滾動(dòng)的。無(wú)限滾動(dòng)也可以在scrollViewDidScroll:方法中進(jìn)行檢測(cè),開頭和結(jié)尾地方多添加幾個(gè)元素,如果到最后一個(gè)了重新回到第一個(gè),但是這種實(shí)現(xiàn)有很強(qiáng)的卡頓感,所以后來(lái)放棄了這個(gè)。后來(lái),在github找到了一種辦法,自定義拖拽手勢(shì)UIPanGestureRecognizer
,然后再拖拽手勢(shì)的target,action方法中進(jìn)行判斷如果狀態(tài)來(lái)更改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;//計(jì)算需要走幾步 if (translation.y > 0) {////向上滑動(dòng) if (translation.y > (item_height/2+10)) { if ((0 < self.centerItem) && (self.centerItem <= (self.count - step))) { self.centerItem -= step; } } } else if (translation.y < 0){//向下滑動(dòng) 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]; } }
然后再滾動(dòng)視圖的scrollViewDidEndScrollingAnimation:的代理方法中來(lái)判斷視圖的偏移量如果到首部或者尾部就重新設(shè)置UICollectionView的偏移量,這樣沒(méi)有絲毫的卡頓感了,但是卻有個(gè)很大的缺陷,自定義的手勢(shì)沒(méi)有是減速的,最多有個(gè)滾動(dòng)結(jié)束時(shí)的動(dòng)畫。
UICollectionView的無(wú)限滾動(dòng)的方法我找了很長(zhǎng)時(shí)間一直沒(méi)有找到很理想的方法,所以這種只能算是個(gè)妥協(xié)的方法。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)題目:UICollectionView的無(wú)限滾動(dòng)---妥協(xié)做法-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.chinadenli.net/article16/dceggg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、App設(shè)計(jì)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容