只有捏住单元格的imageView时,才能放大/缩小UICollectionView的自定义单元格中的UIImageView?

我有一个CollectionView有一个自定义单元格。

我想放大/缩小imageView在单元格中,所以我添加在CollectionView.m捏手势

当我添加手势self.collectionView,像这样:

[self.collectionView addGestureRecognizer:pinchGesture]; 

有用! 我的cell.imageView可以放大/缩小,但是当我捏别的地方(不是在单元格的imageView,我的cell.imageView仍然放大/缩小手势,我想cell.imageView放大/缩小只是当用户捏cell.imageView,所以我尝试添加手势使用此代码:

 [cell.imageView addGestureRecognizer:pinchGesture]; 

但不幸的是它不工作。 当我捏住单元格的imageView时,什么也没有发生。

所以我的问题是,是有可能放大/缩小单元格的imageView只有当用户捏小区的imageView? 而不是其他地方。

在这里输入图像说明 集合视图单元格

 //cell.h #import <UIKit/UIKit.h> @interface Cell : UICollectionViewCell @property (weak, nonatomic) IBOutlet UIScrollView *scrollview; @property (weak, nonatomic) IBOutlet UIImageView *imageview; - (void)setup; @end //cell.m #import "Cell.h" #define MAXIMUM_SCALE 3.0 #define MINIMUM_SCALE 1.0 @interface Cell()<UIScrollViewDelegate> @end @implementation Cell - (void)setup { UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoomImage:)]; self.imageview.gestureRecognizers = @[pinch]; self.imageview.userInteractionEnabled = YES; self.scrollview.delegate = self; } //----------------------------------------------------------------------- #pragma mark - Scrollview Delegate Method - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.imageview; } //----------------------------------------------------------------------- #pragma mark - Custom Methods - (void)zoomImage:(UIPinchGestureRecognizer *)gesture { if (gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerStateChanged) { NSLog(@"gesture.scale = %f", gesture.scale); CGFloat currentScale = self.frame.size.width / self.bounds.size.width; CGFloat newScale = currentScale * gesture.scale; if (newScale < MINIMUM_SCALE) { newScale = MINIMUM_SCALE; } if (newScale > MAXIMUM_SCALE) { newScale = MAXIMUM_SCALE; } CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale); self.imageview.transform = transform; self.scrollview.contentSize = self.imageview.frame.size; } } @end 

ViewController文件

 //ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end //ViewController.m[![enter image description here][1]][1] #import "ViewController.h" #import "Cell.h" @interface ViewController ()<UICollectionViewDataSource, UICollectionViewDelegate> @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; @property (strong, nonatomic) NSArray *imageArray; @end @implementation ViewController //----------------------------------------------------------------------- #pragma mark - Collectionview Datasource Methods //----------------------------------------------------------------------- - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return self.imageArray.count; } //----------------------------------------------------------------------- - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { Cell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath]; [cell setup]; cell.imageview.image = [UIImage imageNamed:[self.imageArray objectAtIndex:indexPath.row]]; return cell; } //----------------------------------------------------------------------- #pragma mark - Lifecycle method - (void)viewDidLoad { [super viewDidLoad]; _imageArray = @[ @"1.jpg", @"1.jpg" ]; self.collectionView.dataSource = self; self.collectionView.delegate = self; } //----------------------------------------------------------------------- - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

注意:您需要为故事板的滚动视图,图像视图和集合视图创build一个IBOutlet。

默认情况下,图像视图的属性userInteractionEnabled设置为NO,禁用所有手势识别器。 将该属性设置为YES应解决您的问题

我build议你在滚动视图的单元格和图像视图中添加使用滚动视图,并启用滚动视图的缩放而不是整个collectionview

  scrollViewMain.maximumZoomScale = 5.0; scrollViewMain.minimumZoomScale = 1.0; scrollViewMain.clipsToBounds = NO; scrollViewMain.delegate = self; 

我认为这会帮助你