How to zoom a UIScrollView inside of a UICollectionViewCell?

后端 未结 7 978
天涯浪人
天涯浪人 2020-12-04 20:10

I\'m trying to add a UIScrollView inside of a UICollectionViewCell. The idea is that you can use pinch to zoom the UIScrollView (and w

相关标签:
7条回答
  • 2020-12-04 20:46

    You might want to try manipulating the UIGestureRecognizers in order to do that. In the 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;
    }
    

    From Apple's documentation on UIView:

    Attaching a gesture recognizer to a view defines the scope of the represented gesture, causing it to receive touches hit-tested to that view and all of its subviews. The view retains the gesture recognizer.

    So you'll also want to make sure to remove them when the cell is not showing anymore.

    - (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];
    }
    

    Since you're not modifying the UIGestureRecognizer's delegate, only its scope, it will still control the zooming of just that cell's scrollview.

    EDIT:

    I added the panGestureRecognizer to the above examples, following a suggestion from the OP that it was needed. The zooming itself is completely handled by the pinchGestureRecognizer, but it's true that in most cases, after zooming an image to a point where only a subset of it is visible, you'll want to pan to move the visible portion around. That is, it's part of a proper zooming experience.

    0 讨论(0)
提交回复
热议问题