2017-08-01 40 views
2

我在Swift中遇到了UIPanGestureRecognizer的一个奇怪情况。 我有一个函数可以处理平移手势,并在UIGestureRecognizerDelegate中指定“false”,这样就不会有其他手势干扰Pan。recognitionizer.location(in:recognizer.view)在swift中返回零点

这里是有问题的情况下:

  1. 用户触摸与1根手指,并开始平移
  2. 用户将第二个手指在屏幕上 - 第二个手指被忽略
  3. 用户拿起第一根指头而第二个仍然感人 - 在这一刻我的处理程序被称为 recognizer.state == .ended。问题是,在这个时刻(位置,我获得通过调用recognizer.location(in: recognizer.view),返回(0,0)

我使用了错误的方式来获得该点的点呢?这似乎是因为第二手指被完全忽视,第一根指头应该表现为一个普通锅,我会得到位置时的状态==结束

回答

0

我只是测试它 - 当识别结束位置不再可用(使用以下)

recognizer.location(ofTouch: 0, in: recognizer.view) 

我会添加一个变量,跟踪在.began &最后已知点.changed(我回来的那些数据),然后将这些数据在.ended

编辑:获取数据了与子类

class pgr: UIPanGestureRecognizer { 
    var myTouch:Set<UITouch>! 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) { 
     myTouch = touches 
     super.touchesEnded(touches, with: event) 
    } 

} 

然后回到你实现

if sender.state == .ended { 
     print(sender.myTouch.first?.location(in: sender.view)) 
    } 
+0

是否记录了它们不可用?我用你说的解决方法,但我不知道这是否是最佳做法 – gbehar

+0

如果您检查UIGestureRecognizer,那么讨论的两个是获取该信息的唯一方法(没有触及:设置,我可以找到 - 我认为这属于UIView,可能有一种很好的方式来做到这一点,但我不知道 – solenoid

+0

UIView会给你在它自己的覆盖func touchesEnded(_ touches:设置,事件:UIEvent? ),但它似乎并没有被调用,如果另一个手势是成功的。 – solenoid