1

私の見解では、以下のように長押しジェスチャーとパンジェスチャーを追加しました

UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(fitToView:)];
    [longPressRecognizer setDelegate:self];
    longPressRecognizer.allowableMovement = 5.0f;
    longPressRecognizer.minimumPressDuration = 2.0;
    [self addGestureRecognizer:longPressRecognizer];

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(move:)];
    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];
    panRecognizer.delegate = self;
    [self addGestureRecognizer:panRecognizer];
    [panRecognizer requireGestureRecognizerToFail:longPressRecognizer];

およびそれらのジェスチャ ハンドラーを以下に示します。

-(void)move:(UIPanGestureRecognizer*)recognizer {

    CGPoint translatedPoint = [recognizer translationInView:self.imgView ];

    if ([recognizer state] == UIGestureRecognizerStateBegan) {
        _firstX = [self.imgView center].x;
        _firstY = [self.imgView center].y;
    } 

    CGAffineTransform newTransform = CGAffineTransformTranslate(CGAffineTransformIdentity, translatedPoint.x , translatedPoint.y );

    self.imgView.transform = newTransform;

}

-(void)fitToView:(UILongPressGestureRecognizer*)recognizer {

    if ([recognizer state] == UIGestureRecognizerStateBegan) {
        self.imgView.transform = CGAffineTransformIdentity;
    }

}

長押しは画像を復元するためのものです。しかし、画像を長押しすると、デリゲートも呼び出され、行ったすべての変更が復元されます。[panRecognizer requireGestureRecognizerToFail:longPressRecognizer];以前は長押し認識に失敗していました。しかし、それは起こりません。私もデリゲートメソッド gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:を試しました。しかし、それはうまくいきませんでした

4

2 に答える 2