             directionFactor == 1 ? menuView.addArrangedSubview(item as! UIView) : menuView.insertArrangedSubview(item as! UIView, at: 0)
         }
         
-        final public func contentDidPan(_ sender: UIPanGestureRecognizer) {
-            let state = sender.state
-            let translation = sender.translation(in: view)
+        public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
+            switch gestureRecognizer {
+            case panGestureRecognizer:
+                let velocity = panGestureRecognizer.velocity(in: view)
+                let factor: CGFloat = 1.2
+                let result = isVertical ? abs(velocity.x) * factor < abs(velocity.y)
+                    : abs(velocity.y) * factor < abs(velocity.x)
+                return result
+            case perpendicularPanGestureRecognizer:
+                let velocity = panGestureRecognizer.velocity(in: view)
+                let factor: CGFloat = 1.2
+                let result = isVertical ? abs(velocity.x) * factor > abs(velocity.y)
+                    : abs(velocity.y) * factor > abs(velocity.x)
+                return result
+            default:
+                return true
+            }
+        }
+   
+//        public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
+//            if gestureRecognizer == panGestureRecognizer {
+//                return safeZone.contains(touch.location(in: view))
+//            } else {
+//                return true
+//            }
+//        }
+        
+        public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
+        let a = gestureRecognizer == panGestureRecognizer && otherGestureRecognizer == perpendicularPanGestureRecognizer
+        let b = gestureRecognizer == perpendicularPanGestureRecognizer && otherGestureRecognizer == panGestureRecognizer
+            return a || b
+        }
+        
+        open func contentDidPanPerpendicular(_ recognizer: UIPanGestureRecognizer) { }
+        
+        open func contentDidPan(_ recognizer: UIPanGestureRecognizer) {
+            let state = recognizer.state
+            let translation = recognizer.translation(in: view)
+            
             var origin, limit, end: CGFloat!
             if isVertical {
                 origin = 20 + contentView.bounds.height / 2

            menuView.setNeedsUpdateConstraints()
        }
        
        final public func append(itemWithTitle title: String, action: @escaping (inout CKPanMenuItemType) -> Void) {
            let item = CKPanMenuItem()
            item.font = UIFont(name: fontName != nil ? fontName! : item.font.fontName, size: fontSize)

            }
        }
        
        /**
         Init and insert a `menu item` at `index`.
         
         - parameter itemWithTitle: `item title`.
         - parameter action: an `action` that will be executed when user highlight and release finger on an `menu item`.
         - parameter at: specify `index` that item should be insert at
         
         - author: John Cido
         */
        final public func insert(
            itemWithTitle title: String, action: @escaping (inout CKPanMenuItemType) -> Void, at index: Int
            ) {
            let item = CKPanMenuItem()
            item.font = UIFont(name: fontName != nil ? fontName! : item.font.fontName, size: fontSize)
            item.index = items.count
            item.action = action
            item.text = title
            item.textColor = color
            item.resume()
            if directionFactor == 1 {
                items.insert(item, at: index)
                menuView.insertArrangedSubview(item, at: index)
            } else {
                items.insert(item, at: items.count - 1 - index)
                menuView.insertArrangedSubview(item, at: items.count - 1 - index)
            }
        }
        
        /**
         Append a custome defined `menu item`.
         
         - parameter item: an `item title` that conforms to `protocol CKPanMenuItemType`.
         
         - author: John Cido
         */
        final public func append(item: CKPanMenuItemType) {
            var item = item
            item.index = items.count
