【问题标题】:How to detect the end of simultaneous gestures? (iOS)如何检测同时手势的结束? (iOS)
【发布时间】:2011-10-18 12:00:23
【问题描述】:

在我的应用中,我同时使用 UIPinchGestureRecognizer、UIRotationGestureRecognizer 和 UIPanGestureRecognizer 来缩放、旋转和移动图像。

方法 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 总是返回 YES 并且图像处理效果很好,但是......如何检测所有同时手势的结束,以便我可以重置图像?

【问题讨论】:

    标签: ios uigesturerecognizer


    【解决方案1】:

    一个简单的解决方案怎么样,比如计算当前正在处理的手势,并在所有手势结束时采取行动?

    .h 文件:

    int handledGesturesCount;
    

    .m 文件:

    - (id)init {
        (...)
        handledGesturesCount = 0;
    }
    
    // gesture handlers - the code for -pinch: repeats for -pan: and -rotate:
    - (void)pinch:(UIPinchGestureRecognizer *)recognizer {
        if (recognizer.state == UIGestureRecognizerStateBegan) {
            handledGesturesCount += 1;
        } else if (recognizer.state == UIGestureRecognizerStateEnded ||
                   recognizer.state == UIGestureRecognizerStateCancelled ||
                   recognizer.state == UIGestureRecognizerStateFailed)
        {
            handledGesturesCount -= 1;
            if (handledGesturesCount == 0) {
                [self resetImage];
            }
        }
    }
    
    - (void)pan:(UIPanGestureRecognizer *)recognizer {
        if (recognizer.state == UIGestureRecognizerStateBegan) {
            handledGesturesCount += 1;
        } else if (recognizer.state == UIGestureRecognizerStateEnded ||
                   recognizer.state == UIGestureRecognizerStateCancelled ||
                   recognizer.state == UIGestureRecognizerStateFailed)
        {
            handledGesturesCount -= 1;
            if (handledGesturesCount == 0) {
                [self resetImage];
            }
        }
    }
    
    - (void)rotate:(UIRotationGestureRecognizer *)recognizer {
        if (recognizer.state == UIGestureRecognizerStateBegan) {
            handledGesturesCount += 1;
        } else if (recognizer.state == UIGestureRecognizerStateEnded ||
                   recognizer.state == UIGestureRecognizerStateCancelled ||
                   recognizer.state == UIGestureRecognizerStateFailed)
        {
            handledGesturesCount -= 1;
            if (handledGesturesCount == 0) {
                [self resetImage];
            }
        }
    }
    

    【讨论】:

    • 当您涉及点击识别器时,此方法将失败。他们似乎在UIGestureRecognizerStateBegan 中发送消息,导致handledGesturesCount 减少到0 以下。
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2023-03-15
    • 1970-01-01
    • 2019-12-21
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多