2017-03-02 64 views
0

是否有可能使兩個collectionviews同步滾動,如果是,如何?使兩個UICollectionView的滾動與分頁啓用同步

我有這個類,含有兩個collectionviews - 一個與日期,和另一箇中,含有的tableview,具有匹配來自第一的CollectionView日期元件。 當我滾動日期或元素,我希望他們相互追隨。

下面是一些代碼,而我到目前爲止已經試過,但沒有任何運氣:

我加入了ScrollViewDelegate上我的課,並試圖此委託法:

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView.isEqual(dayCollectionView) { 
     var offset = contentCollectionView.contentOffset 
     offset.x = dayCollectionView.contentOffset.x 
     contentCollectionView.setContentOffset(offset, animated: true) 
    } else { 
     var offset = dayCollectionView.contentOffset 
     offset.x = contentCollectionView.contentOffset.x 
     dayCollectionView.setContentOffset(offset, animated: true) 
    } 
} 

這種方法一些工作怎麼樣,但是滾動視圖的只是去心理,並不能似乎停止滾動,當他們第一次開始滾動..

我也試過這樣:

func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 

    if scrollView.isEqual(dayCollectionView) { 
     // Days 
     for cell in self.dayCollectionView.visibleCells() { 
      if let indexPath = dayCollectionView.indexPathForCell(cell) { 
       contentCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .None, animated: true) 
      } 
     } 
    } else { 
     // Classes 
     for cell in self.contentCollectionView.visibleCells() { 
      if let indexPath = contentCollectionView.indexPathForCell(cell) { 
       dayCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .None, animated: true) 
      } 
     } 
    } 
} 

這是最好的解決方案至今 - 但它仍然是不正是我想要的 - 這一個卷軸,當其他的CollectionView做滾動..但我希望他們滾動同步:-)

有什麼建議?

回答

0

事實上,該方法scrollViewDidScroll(_:)是用於處理這樣的經驗是最好的方法。

這裏發生的情況是,委託方法scrollViewDidScroll被第一個CollectionView調用,當contentOffset被應用到另一個CollectionView時,委託方法被再次調用,滾動被應用到原始collectionView。您需要識別當前哪些collectionView正在滾動。

對於這一點,你可以利用的UIScrollView的isDragging財產。

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView.isEqual(dayCollectionView), scrollView.isDragging { 
     var offset = contentCollectionView.contentOffset 
     offset.x = dayCollectionView.contentOffset.x 
     contentCollectionView.setContentOffset(offset, animated: true) 
    } else if scrollView.isEqual(contentCollectionView), scrollView.isDragging { 
     var offset = dayCollectionView.contentOffset 
     offset.x = contentCollectionView.contentOffset.x 
     dayCollectionView.setContentOffset(offset, animated: true) 
    } 
} 
+0

感謝隊友!我不是完全工作,但我認爲這是因爲我已啓用分頁。所以我認爲我會堅持做scrollViewDidEndDecelerating,即使它不完全是我想要的 - 但最接近我可以得到,我猜:/ –

+0

但如果你有解決方案,我在聽;) –