麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

UIScrollView的delegate方法妙用之讓UICollectionView滑動到某個你想要的位置

2019-11-14 18:50:05
字體:
來源:轉載
供稿:網友

一個UICollectionView有好多個cell,滑動一下,誰也不知道會停留在哪個cell,滑的快一點,就會多滑一段距離,反之則會滑的比較近,這正是UIScrollview用戶體驗好的地方。
如果想要UICollectionView停留到某個cell的位置,可以用
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated;
這個方法,還能用scrollPosition這個參數控制cell具體停留在上下左右中到底哪個位置。
那么問題來了:如果我只是隨便滑了一下,我也不知道它會停在位于哪個indexPath的cell上,但不管它停在哪個cell上,我都希望這個cell剛好在屏幕中間,應該怎么辦呢?(這個場景在coverFlow的效果里比較常見)
 
之前知道的做法是:
scrollViewDidEndDecelerating或其他delegate方法里,通過當前 contentOffset 計算最近的整數頁及其對應的 contentOffset,然后通過動畫移動到這個位置。
但是這個做法有問題,就是動畫不連貫,完全沒有“剛好停到那里”的感覺。
 
今天在想有沒有其他更好的辦法時,突然發現一個之前從來沒用功的方法:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0);
一看這參數名,再看看這文檔,真是讓人喜不自禁吶!這不就是讓scrollView“剛好停到某個位置”的方法嘛!!!(系統5.0就提供了,現在才看到。。。。。。)
targetContentOffset 是個指針,可以修改這個參數的值,讓scrollView最終停止在目標位置。
注意:scrollView的pagingEnable屬性必須為NO時這個方法才會被調用。
 
例:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGPoint orifinalTargetContentOffset = CGPointMake(targetContentOffset->x, targetContentOffset->y);
    *targetContentOffset = [self  itemCenterOffsetWithOriginalTargetContentOffset:orifinalTargetContentOffset];//計算出想要其停止的位置  
}
這樣scrollView就會逐漸減速,最終停止在itemCenterOffsetWithOriginalTargetContentOffset方法算出來的位置上了,效果杠杠的~
 
本來以為這個方法沒多少人知道,結果百度一搜,發現原來已經有大神寫過詳細的文章了(http://tech.glowing.com/cn/PRactice-in-uiscrollview/),這個就當記錄一下吧
 
另外發現一個直接用NSObject就實現類似效果的庫:https://github.com/nicklockwood/iCarousel   乍看之下沒看懂。。。等有空再仔細研究
 
更新(2015-06-19)
原來UICollectionViewLayout已經提供了兩個方法可以實現這個功能:
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity;
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset NS_AVAILABLE_IOS(7_0);
效果與上面的delegate方法完全一樣,不過這個是UICollectionViewLayout的方法,需要在自己的layout子類里重載。
好處是:這樣就不用再在viewController里寫scrollView的delegate方法了,viewController更加簡潔;跟布局相關的代碼都轉移到了layout的類中 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品免费一区二区 | 久久艹精品 | 精品国产一区二区三区四区阿崩 | 中文字幕在线播放第一页 | 黄污视频在线看 | 在线看日本 | 国产亚洲精彩视频 | 黄色一级视频 | 国产精品福利一区 | 亚洲欧美国产高清 | 亚洲福利在线视频 | 久久超碰99 | 91网页视频入口在线观看 | 日日噜噜噜噜久久久精品毛片 | 在线播放一级片 | 免费毛片电影 | 黄色免费不卡视频 | 成人男女啪啪免费观看网站四虎 | 毛片视频网站 | 亚洲一区二区三区高清视频 | 92看片淫黄大片欧美看国产片 | 一级做a爱片久久毛片a高清 | 九九热免费观看 | 毛片一区二区三区四区 | 日本看片一区二区三区高清 | 国产午夜免费视频 | 97综合| 亚洲极色 | 国产成人高清成人av片在线看 | 国产免费一区二区三区在线能观看 | 午夜视频你懂的 | 九九精品在线播放 | 欧美日本色 | 中国免费一级毛片 | 爱逼av| 成人午夜天堂 | 一本大道av | 国产成人自拍av | 97中文| 成人一级黄色片 | 在线成人免费观看视频 |