2017-05-03 11 views
1

今私はUICollectionViewを水平ページングで設定しました。私はあなたがスクロールしている場合を除き、1つしか表示されないように画面に合わせてセルのサイズを決めました。UICollectionViewのどのページが表示されますか?

私がしたいのは、スクロールを停止した後に表示されているセルのインデックスパスを取得することです。これは、ビューの他の部分が現在表示されている情報に依存しているためです。

私はscrollViewWillBeginDecelerating関数で関数を設定していますが、私は閉じていますが、まだどのようにセルをつかんでいるのかわかりません。

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) { 

    if(lastContentOffset > scrollView.contentOffset.x && lastPointVisited > 0) 
    { 
     lastPointVisited -= 1 

     print("Scrolling Right") 
    } 
    else if(lastContentOffset < scrollView.contentOffset.x && lastPointVisited < myPoints.count - 1) 
    { 
     lastPointVisited += 1 

     print("Scrolling Left") 
    } 

    lastContentOffset = scrollView.contentOffset.x 
} 

スクロールに非常に注意が必要な場合は、これにより正確な結果が得られます。高速になるか、半分しかページをスクロールしないようにスクロールして、すべてをスローするように見えます。

+0

なぜ、 'scrollViewDidScroll'や' scrollViewDidEndScrollingAnimation 'の代わりに 'scrollViewWillBeginDecelerating'を使用していますか? '。あなたが実際に観察していることは、あなたが観察することを期待しているものではないことはあなたの質問からは明らかではありません。実際の問題は何ですか? 「放棄」とは何ですか? –

+0

代わりに 'UIPageViewController'を使わないのはなぜですか? – Sweeper

+0

私は 'scrollViewWillBeginDecelerating'を使用していました。コレクションビューで次に来るものに基づいて地図を移動したいからです。下の回答から@RajatJangraのアドバイスを守った後、スクロールが完了して問題が解決するまで、タイミングに差がなく、待っていることがわかります。 –

答えて

0

それは私が代わりに

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) 

に書き込むのと同時に、

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
    //code here 
} 
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    //code here 
} 

をこれら二つの代表者で同じコードを置く場合、それはそれかどうか私にインデックスの正確な値を与える私の作品速くスクロールしているか、スクロールしています。

希望すると助かります!

+0

ああ。単にscrollViewWillBeginDeceleratingからscrollViewDidEndDeceleratingに変更すると、私の問題が解決しました。あるページから別のページに移動する間に、私の機能を捨てていたのは部分的なスクロールでした。どうもありがとうございます! –

0

あなたはページ番号

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
     let pageWidth = scrollView.frame.size.width 
     let page = Int(floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1) 
     print("Page Number : \(page)") 
    } 
0

あなたは以下のコードを使用することができます

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) { 
     let cellObj = collectionViewDemo.visibleCells[0] 
     print(collectionViewDemo.indexPath(for: cellObj)) 
    } 
0

見えるcollectionViewページを見つけるために、常に効果的であろう、これを試して取得するには、次のコードを使用することができます
func scrollViewDidScroll(_ scrollView: UIScrollView) { 

    let pageWidth = scrollview.frame.width 
    let pageIndex = scrollview.frame.width 
       let indexTemp = Int((scrollview.contentOffset.x + 
    pageWidth/2)/pageWidth) 

     print(pageIndex) 

} 
関連する問題