如何为UIPanGestureRecognizer失败UILongPressGestureRecognizer?

时间:2013-06-10 12:28:10

标签: iphone ios objective-c uigesturerecognizer cgaffinetransform

在我看来,我添加了长按手势和平移手势,如下所示

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:即可。但它没有用

2 个答案:

答案 0 :(得分:0)

尝试实现委托功能

gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

并返回YES

答案 1 :(得分:0)

您是否从 @annie 中看到了这个相关答案Combining a UILongPressGestureRecognizer with a UIPanGestureRecognizer

您只能使用UILongPressGestureRecognizer

执行此操作