iOS:如何从 Swift class 触发 Obj-C 中的 UITapGestureRecognizer 和 UIPanGestureRecognizer?

iOS: How to trigger a UITapGestureRecognizer & UIPanGestureRecognizer in Obj-C from a Swift class?

我使用 SWRevealViewController,我想在 Obj-C class 和 Swift class 的混合中使用它。它在 Swift 中的 Obj-C class 中运行良好,但我的问题是获取左侧菜单的滑动方法无效(按钮有效但滑动无效):

Obj-C 要在 viewController 开头添加代码以使其工作:

   //Side MEnu
    SWRevealViewController *revealViewController = self.revealViewController;
    if ( revealViewController )
    {
        SWRevealViewController *revealVC = self.revealViewController;
        if (![revealVC uniqueNavController])
        {
            [revealVC setUniqueNavController:self.navigationController];
        }
        [_menuAction addTarget:self.revealViewController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
        [_menuAction setImage:[UIImage imageNamed:@"Menu_burger_Clicked.png"] forState:UIControlStateHighlighted];

        UITapGestureRecognizer *tap = [revealViewController tapGestureRecognizer];
        tap.delegate = self;
        [self.view addGestureRecognizer:tap];
    }

Swift 要在 viewController 开头添加代码以使其工作:

 //Side MEnu
        let revealViewController: SWRevealViewController? = SWRevealViewController()
        if revealViewController != nil {
            let revealVC: SWRevealViewController? = revealViewController
            if revealVC?.uniqueNavController == nil {
                revealVC?.uniqueNavController = navigationController
            }
            menuAction.addTarget(revealViewController, action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside)
            view.addGestureRecognizer(revealViewController!.panGestureRecognizer())
            menuAction.setImage(UIImage(named: "Menu_burger_Clicked.png"), for: .highlighted)

            let tap: UITapGestureRecognizer? = revealViewController?.tapGestureRecognizer
            tap?.delegate = self as? UIGestureRecognizerDelegate
            if let aTap = tap {
                self.view.addGestureRecognizer(aTap)
            }
        }

这里是SWRevealViewController.m

中要触发的函数
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)recognizer
{
    // only allow gesture if no previous request is in process
    if ( _animationQueue.count == 0 )
    {
        if ( recognizer == _panGestureRecognizer )
            return [self _panGestureShouldBegin];

        if ( recognizer == _tapGestureRecognizer )
            return [self _tapGestureShouldBegin];
    }

    return NO;
}

这在 swift 视图中有效,但这不是我想要的。我希望从 swift 视图触发 gestureRecognizer Obj-c SWRevealViewController:

        //PanGesture
        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(recognizer:)))
        self.view.addGestureRecognizer(panGestureRecognizer)

        //TapGesture
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(recognizer:)))
        self.view.addGestureRecognizer(tapGestureRecognizer)

func handlePan(recognizer: UIPanGestureRecognizer) {
    print("PAN WORKING!!!!")
}
func handleTap(recognizer: UIPanGestureRecognizer) {
    print("TAP WORKING!!!!")
}

提前致谢...

解决方法如下:

@objc class PlanningViewController: UIViewController, UIGestureRecognizerDelegate, UINavigationControllerDelegate {


    #if SIDE_MENU
        //Side MEnu
        let revealViewController: SWRevealViewController = SWRevealViewController()
        let revealVC: SWRevealViewController = revealViewController
        if revealVC.uniqueNavController == nil
        {
            revealVC.uniqueNavController = navigationController
        }
        menuAction.addTarget(revealViewController, action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside)
        menuAction.setImage(UIImage(named: "Menu_burger_Clicked.png"), for: .highlighted)

        if self.revealViewController() != nil
        {
            self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
            self.view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer)
        }
    #endif

在此处查找:Tutorial