     }
     
     public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
-        if let touchView = touch.view, let _ = touchView as? UIControl {
-            return false
-        }
-        
-        panGestureRecognizer.isEnabled = delegate?.card(cardShouldDrag: self) ?? true
-        return  true
+        guard gestureRecognizer == tapGestureRecognizer, touch.view is UIControl else {
+            return true
+        }
+        return false
+    }
+    
+    public override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
+        guard gestureRecognizer == panGestureRecognizer else {
+            return true
+        }
+        return delegate?.card(cardShouldDrag: self) ?? true
     }
     
     @objc func tapRecognized(_ recogznier: UITapGestureRecognizer) {

        tapGestureRecognizer.delegate = self
        tapGestureRecognizer.cancelsTouchesInView = false
        addGestureRecognizer(tapGestureRecognizer)

        if let delegate = delegate {
            cardSwipeActionAnimationDuration = delegate.card(cardSwipeSpeed: self).rawValue
        }

            // check 4 borders for intersection with line between touchpoint and center of card
            // return smallest percentage of distance to edge point or 0
            return rect.perimeterLines
                .compactMap { CGPoint.intersectionBetweenLines(targetLine, line2: $0) }
                .map { centerDistance / $0.distanceTo(.zero) }
                .min() ?? 0
        }
    }
    
