使用两指捏合来放大 collectionView Xcode

using two finger pinch to zoom in collectionView Xcode

我有一个在滚动视图中有一个集合视图的应用程序。我正在使用以下代码来放大和平移。

-(void) viewDidLoad {
    [super viewDidLoad];

    twoFingerPinchA = [[UIPinchGestureRecognizer alloc]
                                                initWithTarget:self
                                                action:@selector(twoFingerPinch:)]
    ;
    [self.view addGestureRecognizer:(twoFingerPinchA)];
}

-(void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer{

  CGAffineTransform transform = CGAffineTransformMakeScale(twoFingerPinchA.scale, twoFingerPinchA.scale);

    if (twoFingerPinchA.scale < 1) {
        twoFingerPinchA.scale = 1;
    }

    if (twoFingerPinchA.scale >2) {
        twoFingerPinchA.scale = 2;
    }
    self.scrolling.transform = transform;

}

这很好用,除非我放大并移开手指。当我将两根手指放回屏幕上以缩小或再次放大时,视图 returns 不放大。当我将两根手指放在屏幕上重新缩放时,如何让视图保持放大。 我已经尝试捕获我能做到的 twoFingerPinchA.scale 值。但我不知道如何将 twoFingerPinchA.scale 的初始值设置为该值,因为它总是 returns 到 1.

有什么想法吗?

所以我现在尝试检测两根手指何时触摸屏幕以及两根手指何时停止触摸,以便我可以保存并插入 twoFingerPinchA.scale 的值。

然而,无论我放入什么,我似乎都无法检测到触摸。

我有我的控制器常规视图,然后我在其中有一个滚动视图,然后在其中有一个 collectionView。

我已为所有视图启用交互和多点触控,并尝试检测所有视图中的触摸,但没有收到回电。这是我的代码。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Event:%@",event);
// I don't even get this call back as a touch beginning on any view.
    if ([[event touchesForView:self.view] count] >0) {
        NSLog(@"touches");
    }
}

所以我想通了。

首先我使用了这段代码

-(void) viewWillAppear:(BOOL)animated{
    NSString *pinchString = @"1.0";
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:pinchString forKey:@"pinchValue"];
  }

//这是为了确保 pinchValue 键在应用程序首次安装时具有值。

然后我把这个

switch ([twoFingerPinchA state]) {
        case UIGestureRecognizerStatePossible:
        {
        }
            break;
        case UIGestureRecognizerStateBegan:
        {
            NSString *inPinch = [[NSUserDefaults standardUserDefaults] objectForKey:@"pinchValue"];
            float Pinch = [inPinch floatValue];
           twoFingerPinchA.scale = Pinch;
         }
            break;
        case UIGestureRecognizerStateChanged:
        {
         }
            break;
        case UIGestureRecognizerStateEnded:
        {
            NSString *pinchString = [NSString  stringWithFormat:@"%f",twoFingerPinchA.scale];
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:pinchString forKey:@"pinchValue"];
          }
            break;
        case UIGestureRecognizerStateCancelled:
        {
        }
            break;
        case UIGestureRecognizerStateFailed:
        {
        }
            break;
    }

在我的 -(void)twoFingerPinch:(UIPinchGestureRecognizer *)识别器{}

这会在 pinch 结束时将 twoFingerPinchA.scale 的值存储在 usersDefaults 中

再次开始时将 twoFingerPinchA.scale 设置为该存储值。从那里它根据这个值上下调整/进出。

效果很好