Iphone UISwipegestureRecognitor和UIPangestureRecognitor在一个视图中出现问题

Iphone UISwipegestureRecognitor和UIPangestureRecognitor在一个视图中出现问题,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,我有以下代码: UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHighlightReadingVC:)]; swipeGestureRecognizer.delegate = self; [self.highlightReadingVC_.view addGestur

我有以下代码:

    UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHighlightReadingVC:)];
    swipeGestureRecognizer.delegate = self;
    [self.highlightReadingVC_.view addGestureRecognizer:swipeGestureRecognizer];

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHighlightReadingVC:)];
    panGestureRecognizer.delegate = self;
    [panGestureRecognizer requireGestureRecognizerToFail:swipeGestureRecognizer];
    [self.highlightReadingVC_.view addGestureRecognizer:panGestureRecognizer];

我的问题是,尽管我在视图上滑动,但它总是首先检测平移手势。我希望在平移/拖动之前首先识别滑动。如何操作?

您需要将两个
UIgestureRecognitor
的委托之一设置为有意义的对象(可能是
self
),然后听录音,并返回
YES

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
手势识别器
其他手势识别器
识别手势会阻止其他手势识别器识别其手势时,调用此方法。注意,返回
YES
保证允许同时识别;另一方面,返回
,不能保证阻止同时识别,因为另一个手势识别器的代理可能返回

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

我在我的应用程序中也遇到了同样的问题&它对我来说很好。因此,它可能会解决您的问题。

如果目标是让平移手势/s阻止识别滑动(通常情况下):


如果目标是让滑动手势/s阻止识别平移(异常情况):

也要做通常的事情:

panGesture.delegate = self
swipeGesture.delegate = self
并使用手势识别器实现
应同时识别,以始终返回
true

注意:对于
UIWebView
UIScrollView
等内容,要正确理解单触式刷卡,最好是
要求检测识别器发送邮件
以下三(3)项:,长按并使用
.numberOfTouchesRequired=2的第二个刷卡识别器,用户体验才能直观地工作

以下是我们使用的(Swift):


看看我的答案,你可以从中得到一些关于SwipegestureRecognitor的想法吗
panGesture.delegate = self
swipeGesture.delegate = self
class AboutViewController: UIViewController, UIGestureRecognizerDelegate {

    @IBOutlet var webView: UIWebView!

    var swipeToDismiss: UISwipeGestureRecognizer {
        var r = UISwipeGestureRecognizer(target: self, action: "dismiss:")
        r.direction = .Right
        r.delegate = self
        r.requireGestureRecognizerToFail(longPress)
        r.requireGestureRecognizerToFail(pan)
        r.requireGestureRecognizerToFail(doubleSwipe)
        return r
    }

    var doubleSwipe: UISwipeGestureRecognizer {
        var r = UISwipeGestureRecognizer()
        r.direction = .Right
        r.delegate = self
        r.numberOfTouchesRequired = 2
        return r
    }

    var longPress: UILongPressGestureRecognizer {
        var r = UILongPressGestureRecognizer()
        r.allowableMovement = 4000.0
        r.delegate = self
        return r
    }

    var pan: UIPanGestureRecognizer {
        var r = UIPanGestureRecognizer()
        r.delegate = self
        return r
    }

    func dismiss(recognizer: UISwipeGestureRecognizer!) {
         // ...popViewControllerAnimated(true)
    }

    private func setupWebView() {
        // ...
        webView.addGestureRecognizer(longPress)
        webView.addGestureRecognizer(swipeToDismiss)
        webView.addGestureRecognizer(pan)
        webView.addGestureRecognizer(doubleSwipe)
    }


    // MARK: - UIGestureRecognizerDelegate

    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
        println("gesture start: \(gestureRecognizer)")
        return true
    }

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        println("multiple gestures: \(gestureRecognizer), \(otherGestureRecognizer)")
        return true
    }


    // MARK: - UIViewController

    override func viewDidLoad() {
        super.viewDidLoad()

        setupWebView()
    }
}