タイトルが示すように、同じコンテンツを横方向に表示しているUIViewController
2 つがあります。UICollectionViews
メインの写真は一度に 1 枚の写真を表示し、親指の写真は複数の写真を表示します。
UIScrollViewDelegate
ユーザーがメイン CV をスクロールすると、サム CV もスクロールするように、メソッドをオーバーライドしていくつかのコードを追加しました。ただし、反対も有効にしたいと思います(メインをすばやく移動する親指をスクロールします)。しかし、私はフィードバック効果を得ています。
ここに私のコードスニペットがあります:
#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;
}
}
タッチダウン/タッチアップ イベントを追跡して何が起こるかをマスクできると思いますが、それを試みる前に、これを行う別の方法があるかどうかを確認したいと思いましたか? ここで私を助ける提供された方法を見落としていますか?
ありがとう。
編集:ソリューション。どのレイアウトがタッチされているかを追跡するために必要なものを提供する UIScrollViewDelegate メソッドがありました。更新されたコード:
#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;
}