そのためには、UIGestureRecognizers を操作してみてください。でGalleryViewController
:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
GalleryImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"galleryImageCell" forIndexPath:indexPath];
ImageContext *imageContext = [self.images objectAtIndex:indexPath.row];
cell.imageContext = imageContext;
[self.collectionView addGestureRecognizer:cell.scrollView.pinchGestureRecognizer];
[self.collectionView addGestureRecognizer:cell.scrollView.panGestureRecognizer];
return cell;
}
UIView に関する Apple のドキュメントから:
ジェスチャ レコグナイザーをビューにアタッチすると、表示されるジェスチャの範囲が定義され、そのビューとそのすべてのサブビューに対してヒット テストされたタッチを受け取るようになります。ビューはジェスチャ レコグナイザーを保持します。
そのため、セルが表示されなくなったら、必ずそれらを削除する必要があります。
- (void)collectionView:(UICollectionView *)collectionView
didEndDisplayingCell:(UICollectionViewCell *)cell
forItemAtIndexPath:(NSIndexPath *)indexPath {
// Get the cell instance and ...
[self.collectionView removeGestureRecognizer:cell.scrollView.pinchGestureRecognizer];
[self.collectionView removeGestureRecognizer:cell.scrollView.panGestureRecognizer];
}
UIGestureRecognizer のデリゲートを変更しているのではなく、スコープのみを変更しているため、そのセルのスクロールビューのみのズームを制御します。
編集:
panGestureRecognizer
OPから必要であるという提案に従って、上記の例にを追加しました。ズーム自体は によって完全に処理されpinchGestureRecognizer
ますが、ほとんどの場合、イメージをそのサブセットのみが表示されるポイントにズームした後、表示されている部分を移動するためにパンする必要があるのは事実です。つまり、適切なズーム エクスペリエンスの一部です。