您可能想尝试操作 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;
}
来自Apple 关于 UIView 的文档:
将手势识别器附加到视图定义了所表示手势的范围,使其接收对该视图及其所有子视图进行命中测试的触摸。该视图保留了手势识别器。
因此,您还需要确保在单元格不再显示时将其删除。
- (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
,但确实在大多数情况下,在将图像缩放到只有一部分可见的点之后,您需要平移以移动可见部分。也就是说,它是适当缩放体验的一部分。