Swift 4-识别“从一个视图到另一个视图的手指平移”

时间:2018-06-27 17:33:49

标签: ios swift xcode

所以 我所拥有的 是,我在视图上有一个Tap的UITapGestureRecognizer(叫作基础视图),在同一基础视图上有一个UILongPressGestureRecognizer。当用户点击视图操作时,将分派一个,如果用户按住该视图,则会弹出另一个视图。此行为很好。

我想要的 要做的是用户不必单独点击弹出窗口。相反,我希望用户只是在弹出窗口上“拉起”并激活一个动作。

我试图 在弹出窗口上使用UIPanGesture,但这没用。

修改

我将长按手势识别器拖到视图(实际上是自定义键盘上的一个键)上。这是代码

@IBAction func popupPressed(_ sender: UITapGestureRecognizer) {
    //Todo code for popupKey
}

@IBAction func keyPressedLong(_ sender: UILongPressGestureRecognizer) {
    switch sender.state {
    case .began:

        popupTint = UIView(frame: self.frame)
        popupTint!.backgroundColor = UIColor.black
        popupTint!.alpha = 0.6

        self.view.addSubview(popupTint!)

        popup = UIView(frame: sender.view!.frame)

        popup.frame = CGRect(x: popup.frame.origin.x, y: sender.view!.frame.origin.y - popup.frame.height, width: popup.frame.width, height: popup.frame.height)
        popupKey.layer.cornerRadius = 5
        popupKey.clipsToBounds = true

        let popUpTap = UITapGestureRecognizer(target: self, action: #selector(self.popupPressed(tapGesture:)))
        popupKey.addGestureRecognizer(popUpTap)

        self.view.addSubview(popup)
    default:
        break
    }
}

有什么想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

UILongPressGestureRecognizer是连续的,因此您可以使用基本视图中的位置移动弹出窗口并检查是否满足移动阈值。

let longPress = UILongPressGestureRecognizer(target: self, action: #selector(self.didLongPress(gesture:)))
self.baseView.addGestureRecognizer(longPress)

@objc func didLongPress(gesture: UILongPressGestureRecognizer) {
     if self.popUpView.bounds.contains(gesture.location(in: self.popUpView)) {
          // perform action
     }
}

我希望这能回答您的问题。