以编程方式在 Swift 中启动手势识别器?

Programmatically Starting Gesture Recognizer In Swift?

我正在尝试确定是否有以编程方式设置手势识别器状态的方法,以强制它在实际检测到用户输入之前开始。

例如,我在检测到长按时向图像添加平移手势识别器,像这样;

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:")
myImage.addGestureRecognizer(longPressRecognizer)

func longPressed(sender: UILongPressGestureRecognizer) {

   let mainWidth = UIScreen.mainScreen().bounds.width
   let mainHeight = UIScreen.mainScreen().bounds.height

   let myView: UIView(frame: CGRect(x: 0, y: 0, width: mainWidth, height: mainHeight)

   let gestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
   myView.addGestureRecognizer(gestureRecognizer)

   self.view.addSubview(myView)

}

handlePan() 函数中,我可以确定平移何时开始和结束;

func handlePan(gesture: UIPanGestureRecognizer) {

    if gesture!.state == UIGestureRecognizerState.Began {
        print("Started pan")
    }

    if gesture!.state == UIGestureRecognizerState.Ended {
        print("Ended pan")
    }

}

我的问题是,要检测手势何时开始,用户必须 (1) 长按图像,(2) 松开手指,(3) 按住并开始平移。理想情况下,我想让用户 (1) 长按图像,(2) 开始平移。

为了做到这一点,我想我需要想出一种方法让 "trick" 相信平移手势已经开始。

注意:实际上,比这里介绍的更复杂,这就是为什么我需要添加一个带有平移手势的子视图,而不是仅仅添加平移手势直接上图。

你想要做的是预先添加两个手势识别,将它们的代表设置为你的 class,允许它们同时识别(使用下面的方法),并且仅在以下情况下使用来自平移的数据长按成功识别。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
    shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}