如何启用单个触摸来同时处理UILongPressGestureRecognizer和UIPanGestureRecognizer?

时间:2015-09-08 00:14:55

标签: ios swift uigesturerecognizer uipangesturerecognizer uilongpressgesturerecogni

我想在检测到长按后才实现平移手势。我正在监视" UIGestureRecognizerState.Changed"的长按手势,并调用我的选择器来处理那里的平移。选择器触发(我的" print()"检查显示在控制台中),但是我必须在uiview(blueRec)实际移动/翻译之前抬起手指。

我理解长按和平移手势本质上都是连续的,但我怎样才能使用触发长按的初始印刷机来平移触摸的uiview(blueRec)?我不相信这完全是一个例子 - requireGestureRecognizerToFail:

我已经删除了下面的代码,只包含必要的行。

@IBOutlet weak var graySuper: UIView!
@IBOutlet weak var blueRec: UIView!

@IBOutlet weak var blueLeading: NSLayoutConstraint!
@IBOutlet weak var blueTop: NSLayoutConstraint!

var longPressGesture:UILongPressGestureRecognizer!


override func viewDidLoad() {

    super.viewDidLoad()

    self.longPressGesture = UILongPressGestureRecognizer(target:self, action:"handleLongpress:")
    self.longPressGesture.minimumPressDuration = 2
    self.blueRec.addGestureRecognizer(self.longPressGesture)


}


func handleLongpress(sender:UILongPressGestureRecognizer) {

    print("LPress")

   switch (sender.state) {
    case UIGestureRecognizerState.Began:

        self.blueRec.center = sender.locationInView(self.graySuper)


        break;
    case UIGestureRecognizerState.Changed:

        self.blueRec.center = sender.locationInView(self.graySuper)



        break;
    case UIGestureRecognizerState.Ended:

        print("Press Ended ")

        break;
    default:
        break;
    } 

}

1 个答案:

答案 0 :(得分:1)

我回答了自己的问题,因为这是一个非常基本的解决方案。希望这至少可以帮助别人。

长按手势足以跟踪可拖动对象的移动,并且不需要单独的平移手势,因为它出现在我的原始代码中。

    @IBOutlet weak var graySuper: UIView!
@IBOutlet weak var blueRec: UIView!

@IBOutlet weak var blueLeading: NSLayoutConstraint!
@IBOutlet weak var blueTop: NSLayoutConstraint!

var longPressGesture:UILongPressGestureRecognizer!


override func viewDidLoad() {

    super.viewDidLoad()

    self.longPressGesture = UILongPressGestureRecognizer(target:self, action:"handleLongpress:")
    self.longPressGesture.minimumPressDuration = 2
    self.blueRec.addGestureRecognizer(self.longPressGesture)


}


func handleLongpress(sender:UILongPressGestureRecognizer) {

    print("LPress")

   switch (sender.state) {
    case UIGestureRecognizerState.Began:

        self.blueRec.center = sender.locationInView(self.graySuper)


        break;
    case UIGestureRecognizerState.Changed:

        self.blueRec.center = sender.locationInView(self.graySuper)



        break;
    case UIGestureRecognizerState.Ended:

        print("Press Ended ")

        break;
    default:
        break;
    }