UITapGestureRecognizer可能存在错误?

时间:2018-04-23 18:03:18

标签: swift xcode uigesturerecognizer uitapgesturerecognizer

我正在尝试为我继承的所有视图控制器创建一个基本视图控制器。此基本视图控制器有一个navigationController,其中rightBarButtonItem是一个按钮,在整个视图的顶部显示一个菜单(menuButtonView)。 menuButtonView 控制菜单的所有功能(显示,解除等)

我将NavigationItem.rightBarButtonItem设置为viewDidLoad中名为 menuButtonView 的自定义UIView:

let menuButtonView = NavigationMenuButton()
menuButtonView.delegate = self
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: menuButtonView)

委托是一个简单的协议,有一个函数来处理选择的菜单项。它基本上只处理导航到的位置。

我的 menuButtonView 非常简单,该类处理背景和菜单项的菜单显示,解除和操作。初始化 menuButtonView 时,会设置如下背景视图:

backgroundView = UIView(frame: UIScreen.main.bounds)
backgroundView.backgroundColor = UIColor.black
backgroundView.alpha = 0.0
backgroundView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(backgroundSelected(_:))))
backgroundView.isUserInteractionEnabled = true

它还设置菜单项:

let logoutItem = NavigationMenuItem(title: "Log out", withSize: itemSize)
logoutItem.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.menuItemSelected(_:))))
logoutItem.tag = 2
self.openedFrame = CGRect(x....)
self.items.append(logoutItem)

选择菜单按钮后,它将运行此功能:

func open() {

    UIApplication.shared.keyWindow?.rootViewController?.view.addSubview(backgroundView)
    UIView.animate(withDuration: 0.3, animations: {
        self.backgroundView.alpha = 0.75

        for item in self.items {
            UIApplication.shared.keyWindow?.rootViewController?.view.addSubview(item)
            item.frame = item.openFrame
            item.alpha = 1.0
        }

    })

    self.isOpen = true

}

然而,错误发生在背景和menuItems' tapGestureRecognizers ...当我点击背景时,没有任何反应,backgroundSelected函数永远不会被触发。但是当我点击menuItem时,menuItemSelectedbackgroundSelected函数都会被触发?初始化 menuButtonView 和调用我所做的open()函数之间没有任何内容可以改变背景或menuButtonItems的状态。

当选择menuButtonItem时,我会调用一个协议函数来提醒委托者选择了menuButtonItem,以便viewController可以处理该动作,但这不应该影响tapGestureRecognizers。

打开菜单后,我甚至打印出每个项目的tapGestureRecognizer,背景和所有日志都符合它们的要求(每个项目都有一个识别器,目标为menuButtonSelected,背景有一个具有目标backgroundSelected)的识别器。但是当我实际点击背景时,没有任何反应,当我点击一个菜单项时,menuButtonSelectedbackgroundSelected函数都会被触发......

这可能是UITapGestureRecognizer中的错误,还是我没有正确设置tapGestureRecognizers?

0 个答案:

没有答案