日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置

發(fā)布時(shí)間:2024/10/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一個(gè)UICollectionView有好多個(gè)cell,滑動(dòng)一下,誰(shuí)也不知道會(huì)停留在哪個(gè)cell,滑的快一點(diǎn),就會(huì)多滑一段距離,反之則會(huì)滑的比較近,這正是UIScrollview用戶(hù)體驗(yàn)好的地方。 如果想要UICollectionView停留到某個(gè)cell的位置,可以用 - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated; 這個(gè)方法,還能用scrollPosition這個(gè)參數(shù)控制cell具體停留在上下左右中到底哪個(gè)位置。 那么問(wèn)題來(lái)了:如果我只是隨便滑了一下,我也不知道它會(huì)停在位于哪個(gè)indexPath的cell上,但不管它停在哪個(gè)cell上,我都希望這個(gè)cell剛好在屏幕中間,應(yīng)該怎么辦呢?(這個(gè)場(chǎng)景在coverFlow的效果里比較常見(jiàn)) 之前知道的做法是: scrollViewDidEndDecelerating或其他delegate方法里,通過(guò)當(dāng)前 contentOffset 計(jì)算最近的整數(shù)頁(yè)及其對(duì)應(yīng)的 contentOffset,然后通過(guò)動(dòng)畫(huà)移動(dòng)到這個(gè)位置。 但是這個(gè)做法有問(wèn)題,就是動(dòng)畫(huà)不連貫,完全沒(méi)有“剛好停到那里”的感覺(jué)。 今天在想有沒(méi)有其他更好的辦法時(shí),突然發(fā)現(xiàn)一個(gè)之前從來(lái)沒(méi)用功的方法: - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0); 一看這參數(shù)名,再看看這文檔,真是讓人喜不自禁吶!這不就是讓scrollView“剛好停到某個(gè)位置”的方法嘛!!!(系統(tǒng)5.0就提供了,現(xiàn)在才看到。。。。。。) targetContentOffset 是個(gè)指針,可以修改這個(gè)參數(shù)的值,讓scrollView最終停止在目標(biāo)位置。 (2016年12月7日更新) 注意:scrollView的pagingEnable屬性必須為NO時(shí)這個(gè)方法才會(huì)被調(diào)用。 感謝@?ZeroOnet?評(píng)論中指出,這個(gè)方法在pagingEnable==YES的時(shí)候也會(huì)調(diào)用; 但是pagingEnable的效果會(huì)覆蓋這個(gè)方法的效果,達(dá)不到我們想要的“剛好停到指定位置的效果”,所以還是需要注意將pagingEnable設(shè)置為NO! 例: - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
??? CGPoint originalTargetContentOffset = CGPointMake(targetContentOffset->x, targetContentOffset->y);
??? CGPoint targetCenter = CGPointMake(originalTargetContentOffset.x + CGRectGetWidth(self.collectionView.bounds)/2, CGRectGetHeight(self.collectionView.bounds) / 2);
??? NSIndexPath *indexPath = nil;
??? NSInteger i = 0;
??? while (indexPath == nil) {
??????? targetCenter = CGPointMake(originalTargetContentOffset.x + CGRectGetWidth(self.collectionView.bounds)/2 + 10*i, CGRectGetHeight(self.collectionView.bounds) / 2);
??????? indexPath = [self.collectionView indexPathForItemAtPoint:targetCenter];
??????? i++;
??? }
??? self.selectedIndex = indexPath;
??? //這里用attributes比用cell要好很多,因?yàn)閏ell可能因?yàn)椴辉谄聊环秶鷥?nèi)導(dǎo)致cellForItemAtIndexPath返回nil
??? UICollectionViewLayoutAttributes *attributes = [self.collectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:indexPath];
??? if (attributes) {
??????? *targetContentOffset = CGPointMake(attributes.center.x - CGRectGetWidth(self.collectionView.bounds)/2, originalTargetContentOffset.y);
??? } else {
??????? DLog(@"center is %@; indexPath is {%@, %@}; cell is %@",NSStringFromCGPoint(targetCenter), @(indexPath.section), @(indexPath.item), attributes);
??? }
??? } 這樣scrollView就會(huì)逐漸減速,最終停止在itemCenterOffsetWithOriginalTargetContentOffset方法算出來(lái)的位置上了,效果杠杠的~ 本來(lái)以為這個(gè)方法沒(méi)多少人知道,結(jié)果百度一搜,發(fā)現(xiàn)原來(lái)已經(jīng)有大神寫(xiě)過(guò)詳細(xì)的文章了(http://tech.glowing.com/cn/practice-in-uiscrollview/),這個(gè)就當(dāng)記錄一下吧 另外發(fā)現(xiàn)一個(gè)直接用NSObject就實(shí)現(xiàn)類(lèi)似效果的庫(kù):https://github.com/nicklockwood/iCarousel ? 乍看之下沒(méi)看懂。。。等有空再仔細(xì)研究 更新(2015-06-19) 原來(lái)UICollectionViewLayout已經(jīng)提供了兩個(gè)方法可以實(shí)現(xiàn)這個(gè)功能: - (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity; - (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset NS_AVAILABLE_IOS(7_0); 效果與上面的delegate方法完全一樣,不過(guò)這個(gè)是UICollectionViewLayout的方法,需要在自己的layout子類(lèi)里重載。 好處是:這樣就不用再在viewController里寫(xiě)scrollView的delegate方法了,viewController更加簡(jiǎn)潔;跟布局相關(guān)的代碼都轉(zhuǎn)移到了layout的類(lèi)中? ?

轉(zhuǎn)載于:https://www.cnblogs.com/Phelthas/p/4584645.html

總結(jié)

以上是生活随笔為你收集整理的UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲久久一区二区 | 网站免费视频www | av一级在线| 青青草原影视 | 激情一区二区 | 国产精品久久久久9999 | 欧美人妻少妇一区二区三区 | a视频 | 久久精品一区二区三区四区 | 长河落日电视连续剧免费观看 | 成人免费毛片糖心 | 欧美日韩国产激情 | 日韩精品一区在线观看 | 久章草影院 | 日韩美女视频在线观看 | 亚洲一久久 | 久久性片 | 久久久精 | 国产精品丝袜在线观看 | 中文字幕 日韩 欧美 | 成人tiktok黄短视频 | 成人午夜视频网站 | 91嫩草在线 | 热久久精 | 精品人妻一区二区三区香蕉 | 国产欧美熟妇另类久久久 | 精品一区二区三区四区五区六区 | 秋霞av在线| 中文字幕 国产精品 | 午夜激情免费视频 | 久久99一区 | 成人在线激情 | 欧美日韩性生活 | 精品人妻一区二区三区四区久久 | 亚洲国产中文字幕在线 | 在线观看日韩一区 | 自拍偷拍第3页 | 涩涩涩涩av| 一本久久综合亚洲鲁鲁五月天 | 国模无码视频一区二区三区 | www.com色| 色一情一交一乱一区二区三区 | 999在线观看视频 | 久久久久免费看 | 黄色片网站免费 | 黄色在线小视频 | 狠狠搞狠狠干 | 爱爱爱免费视频 | 久久网中文字幕 | 国内精品视频在线 | 乱子伦视频在线看 | 中文在线视频 | 国产在线视频资源 | 一级肉体全黄裸片中国 | 欧美巨大乳 | 欧美日韩国产精品一区二区三区 | 日韩一区二区三区中文字幕 | 亲嘴脱内衣内裤 | 9.1成人看片免费版 日韩经典在线 | 精品午夜视频 | 女尊高h男高潮呻吟 | 亚洲成人av一区 | 美女脱了内裤喂我喝尿视频 | 欧美一区二区三区精品 | 成年人福利 | 理论片午午伦夜理片影院99 | √资源天堂中文在线 | 国产伦精品一区二区三区在线观看 | 97激情| 日本草逼视频 | 伊人久久中文 | 叼嘿视频91 | 精品乱子伦一区二区 | 91波多野结衣 | 福利一二三区 | 亚洲欧美一区二区三区久久 | 丁香七月婷婷 | 啪免费视频 | 神马久久网 | 成人羞羞在线观看网站 | 国产欧美一区二区三区另类精品 | 日本中文字幕在线看 | 亚洲精品久久夜色撩人男男小说 | 成人免费网站黄 | 国产亚洲毛片 | 亚洲一区欧美二区 | 久久夜色精品亚洲 | 成人免费视频免费观看 | 九色91porny| www麻豆 | 用我的手指扰乱你 | 17c一起操 | 日日爱视频 | 亚洲一区二区国产 | 久久1024 | 伊人三级 | 天天干天天做天天操 | 中文字幕色图 | av在线小说|