代码之家  ›  专栏  ›  技术社区  ›  vapul

如何启用单次触摸来处理UILongPressGestureRecognizer和UIPanGesturerecgnizer?

  •  0
  • vapul  · 技术社区  · 10 年前

    我只想在检测到长按后执行平移手势。我正在监视“UIGestureRecognizerState.Changed”的长按手势,并调用选择器处理那里的平移。选择器启动(我的“print()”检查显示在控制台中),但在uiview(blueRec)实际移动/转换之前,我必须抬起手指。

    我知道长按和平移手势本质上都是连续的,但我如何使用启动长按的初始按压来同时平移触摸的uiview(blueRec)?我认为这根本不是 -要求手势识别器失败:

    我将下面的代码精简为仅包含基本行。

    @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 回复  |  直到 10 年前
        1
  •  1
  •   vapul    10 年前

    我在回答我自己的问题,因为这是一个非常基本的解决方案,当时我还没有找到。希望这至少对某人有所帮助。

    长按手势足以跟踪可拖动对象的移动,不需要单独的平移手势,正如我的原始代码中所显示的那样。

        @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;
        }