2017-03-02 10 views
0

두 컬렉션 뷰를 동 기적으로 스크롤 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?두 개의 UICollectionView의 스크롤을 페이징을 사용하여 동기화 할 수 있습니다.

필자는 두 개의 collectionviews (하나는 날짜가 있고 다른 하나는 tableview를 포함하며 첫 번째 collectionview의 날짜와 일치하는 요소가 있음)를 포함합니다. 날짜 나 요소를 스크롤 할 때 서로 따라야합니다. 여기

는 일부 코드, 그리고 내가 지금까지 시도했지만 운이없이 :

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) 
    } 
} 

이 방법

나는이 대의원 방법을 내 클래스에 ScrollViewDelegate을 추가하고, 시도

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) 
      } 
     } 
    } 
} 
0 :있는 ScrollView 그냥 정신 가고있다, 그들은 처음이야 압연 시작하면 못할

가 나는 또한이 시도 .. 스크롤을 중지 한 것처럼 보일 방법,하지만 일부 작품

하는 가장 좋은 방법은 지금까지 -하지만 그것은 정확히 내가 원하는 아직 아니다 - 다른 collectionview이 스크롤 수행이 하나의 스크롤 ..하지만 그들에게 동기

어떤 제안이 :-) 스크롤하려면?

답변

0

실제로, 방법 scrollViewDidScroll(_:)은 그러한 경험을 처리하는 가장 좋은 방법입니다.

여기서 발생하는 것처럼 보이는 부분은 첫 번째 CollectionView에 대한 대리자 메서드 scrollViewDidScroll이 호출되고 다른 CollectionView에 contentOffset이 적용되면 대리자 메서드가 다시 호출되고 원래 collectionView에 스크롤이 적용된다는 것입니다. 그 시점에서 어떤 collectionViews가 스크롤되고 있는지를 알아야합니다.

이 경우 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

감사합니다. 완전히 작동하지는 않지만 페이징이 활성화되어 있기 때문에 생각합니다. 그래서 스크롤을 계속합니다 .DeDndEndDecelerating을 수행합니다. 정확히 원하는 것이 아니더라도 가능합니다. 추측 :/ –

+0

하지만 해결책이 있다면 듣고 있습니다.) –