日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品视频免费观看 | 古代黄色一级片 | 青青伊人网| 啪啪啪一区二区 | 中文无码精品一区二区三区 | 人人超碰在线 | 一级国产精品 | 手机在线看片福利 | 日本一区二区三区免费在线观看 | 亚洲欧美色图 | 亚洲天堂av一区二区三区 | 欧美日韩激情网 | 亚洲狠狠丁香婷婷综合久久久 | 国产在线xx| 日本免费精品视频 | 男人操女人的网站 | 亚洲va在线∨a天堂va欧美va | 成人免费毛片足控 | 美国av片 | 国产在线一卡二卡 | 爱情岛黄色 | 中文国产视频 | 日本三级网站在线观看 | 中文字幕乱码人妻无码久久95 | 日韩精品视频在线播放 | 少妇闺蜜换浪荡h肉辣文 | 日韩欧美一级视频 | 美女撒尿无遮挡网站 | 毛片网站在线免费观看 | 自拍偷拍综合 | 色多多在线观看 | 人人妻人人藻人人爽欧美一区 | 中文无码av一区二区三区 | 美女福利在线观看 | 九一av| 日韩精品一区二区在线观看 | 日日夜夜爱 | 国产精品影片 | 在线尤物| 51国产在线| 名校风暴在线观看免费高清完整 | 国产超碰91 | 无码aⅴ精品一区二区三区 精品久久在线 | 黄色成人免费网站 | 亚洲精品www.| 黄瓜视频在线观看污 | av午夜天堂 | 人妻 日韩 欧美 综合 制服 | 思思99re| 男人的天堂一区 | 亚洲天堂一 | 天天综合网在线观看 | 美国性生活大片 | 乌克兰做爰xxxⅹ性视频 | 中文字幕不卡一区 | 国产精品一区二区人妻喷水 | 国产九色av| jizz在线免费观看 | 偷偷操不一样 | 好av| 中文字幕25页 | 成人爱爱网站 | 国产理论片在线观看 | 亚洲涩涩| 4438x全国最大成人网 | 久久久久久国产精品视频 | 欧美三日本三级少妇三99 | 在线精品一区 | 天天做天天射 | 牛牛精品一区 | 精产国品一区二区三区 | 水密桃av| 91精品国产91久久久久久吃药 | 女女同性女同一区二区三区九色 | 黄页在线播放 | 久久久片| 三女警花合力承欢猎艳都市h | 91精品视频一区二区三区 | 亚洲综合图片一区 | 男人操女人的视频 | 精品国产污污免费网站入口 | 91视频88av | 日本理伦片午夜理伦片 | 欧美日韩高清一区二区 | 国产精品自拍视频 | 黄色三级视频网站 | 男人天堂a| 少妇激情偷人爽爽91嫩草 | 一级片在线免费播放 | 亚洲成人福利视频 | 国产又黄又猛 | 免费久久网站 | 亚洲免费一区二区 | 亚洲精品乱码久久久久久蜜桃动漫 | 欧美黄色录像 | 蜜桃9999 | av在线一区二区三区 | 毛片麻豆 | 131mm少妇做爰视频 |