0

私は 2 つのコレクション ビューを使用し、それらはスクロールのために互いに接続されています。一方がスクロールすると、もう一方もスクロールします。これは、次のように didScroll デリゲート関数で処理されます。

  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    var screenHeight = max(Int(UIScreen.mainScreen().bounds.width), Int(UIScreen.mainScreen().bounds.height))

    if ( collectionView == self.bottomSliderCollectionView)
    {
        return CGSizeMake(self.sliderCollectionView.frame.width - 65, 50)
    }else {
        return CGSizeMake(self.sliderCollectionView.frame.width , self.sliderCollectionView.frame.height)
    }
  }

    func scrollViewDidScroll(scrollView: UIScrollView) {

    if (scrollView == self.sliderCollectionView ){

        // Calculate where the collection view should be at the right-hand end item
        var contentOffsetWhenFullyScrolledRight = self.sliderCollectionView.frame.size.width * CGFloat(self.workingMenuSlider.count - 1)


        if (scrollView.contentOffset.x == contentOffsetWhenFullyScrolledRight  ) {

            // user is scrolling to the right from the last item to the 'fake' item 1.
            // reposition offset to show the 'real' item 1 at the left-hand end of the collection view

            var newIndexPath = NSIndexPath(forItem: 1, inSection: 0)
            self.sliderCollectionView.scrollToItemAtIndexPath(newIndexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)


        } else if (scrollView.contentOffset.x == 0)  {

            // user is scrolling to the left from the first item to the fake 'item N'.
            // reposition offset to show the 'real' item N at the right end end of the collection view

            var newIndexPath =  NSIndexPath(forItem: self.workingMenuSlider.count - 2, inSection: 0)
            self.sliderCollectionView.scrollToItemAtIndexPath(newIndexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)


        }

    }

    if (scrollView.contentOffset.x < 0)  {

        var newIndexPath =  NSIndexPath(forItem: self.workingMenuSlider.count - 2, inSection: 0)
        self.sliderCollectionView.scrollToItemAtIndexPath(newIndexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
        self.bottomSliderCollectionView.scrollToItemAtIndexPath(newIndexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)

    }

    var contentOffsetWhenFullyScrolledRight = self.sliderCollectionView.frame.size.width * CGFloat(self.workingMenuSlider.count - 1)

    if (scrollView.contentOffset.x > contentOffsetWhenFullyScrolledRight) {

        var newIndexPath = NSIndexPath(forItem: 1, inSection: 0)
        self.sliderCollectionView.scrollToItemAtIndexPath(newIndexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
        self.bottomSliderCollectionView.scrollToItemAtIndexPath(newIndexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)

    }

    if (self.sepratedScroll == true ) {



        if (scrollView == self.sliderCollectionView ){

            var nesbat = (self.bottomSliderCollectionView.frame.width - 65) / self.sliderCollectionView.frame.width

            self.sepratedScroll = false
            self.bottomSliderCollectionView.contentOffset.x = self.sliderCollectionView.contentOffset.x * nesbat

            self.sepratedScroll = true

        }else {
                self.sepratedScroll = false

                var nesbat = (self.bottomSliderCollectionView.frame.width - 65) / self.sliderCollectionView.frame.width

                self.sliderCollectionView.contentOffset.x = (self.bottomSliderCollectionView.contentOffset.x ) / nesbat

                self.sepratedScroll = true
        }
    } else {

    }

}

ご覧のとおり、var nesbat は float を計算しています。これは、私の bottomCollection ビューのセル幅が、sliderCollectionView よりも - 65 であるためです。

どちらもページングスクロールに設定されています。一番上のもの (SliderCollectionView) はうまくいきます。これは、データの配列に重複する値を持つ無限スクロールです。

だから、ここで私の質問は、ページングスクロールである私のbottomCollectionviewスライドがセル幅を超えているときです。bottomCollectionView のセルの幅を正確にスクロールしたい。

didScroll Viewで処理するように言っている回答をテストしましたが、私の場合は問題ありません。無限スクロールと接続されたコレクション ビューを処理するには、多すぎます。

コレクションビュー全体の幅ではなく、セルの幅に設定するページングスクロールを手伝ってください。ありがとう

4

1 に答える 1