2017-08-01 41 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