首页 > 解决方案 > 如何创建 UIBarButton 以使用 Swift 调用 UITapGestureRecognizer 函数?

问题描述

我的场景,我正在尝试实现UIBarButtonclick to call 下面两个functions。下面的代码已经可以使用,view tab and pan但现在我正在更改按钮单击以调用以下两个函数。下面怎么修改code

@objc
    func handleCardTap(recognzier:UITapGestureRecognizer) {
        switch recognzier.state {
        case .ended:
            animateTransitionIfNeeded(state: nextState, duration: 0.9)
        default:
            break
        }
    }

    @objc
    func handleCardPan (recognizer:UIPanGestureRecognizer) {
        switch recognizer.state {
        case .began:
            startInteractiveTransition(state: nextState, duration: 0.9)
        case .changed:
            let translation = recognizer.translation(in: self.cardViewController.handleArea)
            var fractionComplete = translation.y / cardHeight
            fractionComplete = cardVisible ? fractionComplete : -fractionComplete
            updateInteractiveTransition(fractionCompleted: fractionComplete)
        case .ended:
            continueInteractiveTransition()
        default:
            break
        }

    }

标签: iosswiftuibarbuttonitemuitapgesturerecognizer

解决方案


如果您需要从 a 调用这两个点击手势识别器功能UIBarButtonItem,最好的办法是创建一个自定义视图栏按钮项并将手势识别器添加到该自定义视图。像这样的东西会起作用:

let tapGestureView = UIView() // initialize & size this as you need
tapGestureView.addGestureRecognizer(UITapGestureRecognizer(action: #selector(handleCardTap(_:)), target: self))
tapGestureView.addGestureRecognizer(UITapGestureRecognizer(action: #selector(handleCardPan(_:)), target: self))
let barButton = UIBarButtonItem(customView: tapGestureView)

这是UITapGestureRecognizersUIBarButtonItems的一些额外资源。不过,为同一个视图设置 2 个不同的轻击手势似乎有点奇怪,其中一个是平移动作(至少按名称)似乎很奇怪,但这就是您要实现的方式!


推荐阅读