DefinitelyNotAPlesiosaur DefinitelyNotAPlesiosaur - 4 months ago 26
iOS Question

How to use UIGestureRecognizerDelegate?

My Setup

I'm trying to replicate Google Now's card interface.

I have a

UIView
which is a subview of (inside) a
UIScrollView
. Both are controlled from the same
UIViewController
. The
UIView
has a
UIPanGestureRecognizer
attached to it by the
UIViewController
.

The
UIScrollView
is used to scroll up and down. The
UIPanGestureRecognizer
is used to swipe away the
UIView
.

The Problem

I can't scroll when I'm touching the
UIView
(the card)

The Question

How do I implement
UIGestureRecognizerDelegate
to enable
gestureRecognizer(_:shouldRecognizeSimultaneouslyWithGestureRecognizer:)
on the card so that it'll let the
UIScrollView
scroll?

I've spent several hours trying to figure this out, and I would be incredibly thankful for help.

Answer

In case anyone is wondering how to do this, here's the answer:

When you declare your class, add UIGestureRecognizerDelegate after the class it subclasses. Here's what that looks like in my case:

class CardViewController: UIViewController, UIGestureRecognizerDelegate

Next, you add this function to the body of the UIViewController:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

And finally, you do this to the UIPanGestureRecognizer:

somePanGestureRecognizer.delegate = self