Comme le suggère le titre, j'ai un UIViewController
avec deux UICollectionViews
qui affichent le même contenu horizontalement. Le principal montre une photo à la fois, les pouces en montrent plusieurs.Défilement manuel de deux UICollectionViews affichant le même contenu
J'ai surchargé la méthode UIScrollViewDelegate
et ajouté un peu de code pour que lorsque l'utilisateur fait défiler le CV principal, le thumbs CV défile aussi. Cependant je voudrais activer le contraire aussi (faire défiler les pouces qui vont rapidement bouger le principal). Cependant, je reçois un effet de rétroaction.
Voici mon extrait de code:
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if(scrollView == self.mainCollectionView){
CGFloat x = self.mainCollectionView.contentOffset.x/self.mainCollectionView.bounds.size.width * SM_IPHONE_THUMB_CONTAINER_SIZE; // cell width + spacing 48 + 8
CGFloat y = 0;
CGPoint contentOffset = CGPointMake(x, y);
self.thumbsCollectionView.contentOffset = contentOffset;
}
else if(scrollView == self.thumbsCollectionView){
// CGFloat x = self.thumbsCollectionView.contentOffset.x/self.thumbsCollectionView.bounds.size.width * SM_IPHONE_THUMB_CONTAINER_SIZE; // cell width + spacing 48 + 8
// CGFloat y = 0;
// CGPoint contentOffset = CGPointMake(x, y);
// self.mainCollectionView.contentOffset = contentOffset;
}
}
Je suppose que je peux suivre les toucher down/up événements pour masquer ce qui est autorisé à se produire, mais avant que je tente que je pensais voir s'il y a une façon différente de le faire? Je suis je donnant sur une méthode fournie qui va m'aider ici?
Merci.
Édition: solution. Il y avait une méthode UIScrollViewDelegate qui fournissait ce dont j'avais besoin pour suivre la mise en page. Code à jour:
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if(scrollView == self.mainCollectionView &&
self.scrollingView == self.mainCollectionView){
CGFloat x = self.mainCollectionView.contentOffset.x/self.mainCollectionView.bounds.size.width * SM_IPHONE_THUMB_CONTAINER_SIZE; // cell width + spacing 48 + 8
CGFloat y = 0;
CGPoint contentOffset = CGPointMake(x, y);
self.thumbsCollectionView.contentOffset = contentOffset;
}
else if(scrollView == self.thumbsCollectionView &&
self.scrollingView == self.thumbsCollectionView){
CGFloat x = self.thumbsCollectionView.contentOffset.x/SM_IPHONE_THUMB_CONTAINER_SIZE * self.mainCollectionView.frame.size.width; // cell width + spacing 48 + 8
CGFloat y = 0;
CGPoint contentOffset = CGPointMake(x, y);
self.mainCollectionView.contentOffset = contentOffset;
}
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
self.scrollingView = scrollView;
}
Merci. C'est ce que je pensais faire, bien que j'allais sous-classer les UICollectionViews et suivre leurs événements tactiles pour savoir lequel défilait activement. La méthode déléguée que vous avez fournie a fonctionné à merveille après avoir corrigé les maths pour le décalage. – VaporwareWolf