2017-06-18 72 views
0

我有一個我想拖動的SpringButton。這是我的代碼:UIPanGestureRecognizer停留在狀態開始

var gesture = UIPanGestureRecognizer(target: self, action: #selector(userDragged)) 
card.addGestureRecognizer(gesture) 

var cardIsCurrentlyMoving = false 

func userDragged(gesture: UIPanGestureRecognizer){ 
    if !cardIsCurrentlyMoving{ 
     if let button = gesture.view as? SpringButton { 
      if gesture.state == .began { 
       print("begon") 
       cardIsCurrentlyMoving = true 
       startPosition = button.center 
      } else if gesture.state == .changed { 
       print("changed") 
      } else if gesture.state == .ended{ 
       print("ended") 
       cardIsCurrentlyMoving = false 
      } 
     } 
    } 
} 

函數被調用,狀態變爲.began。但是,當試圖移動按鈕時,什麼都不會發生。這是因爲在.began中設置爲true,但從不回到false,因爲gesture.state .changed.ended從不被調用。

當我鬆開手指並再次觸摸按鈕時,沒有任何反應。爲什麼UIPanGestureRecognizer不執行.changed.ended

謝謝。

回答

1

我認爲你需要檢查你的if語句

if !cardIsCurrentlyMoving{ 

} 

平移手勢不斷調用方法與改變的狀態。所以userDragged函數不斷調用,但僅僅因爲你的上面的if語句,控制不會進入if語句中。

所以我建議使用這個,而不是你的。

func userDragged(gesture: UIPanGestureRecognizer){ 

     if let button = gesture.view as? SpringButton { 
      if gesture.state == .began { 
       print("begon") 
       cardIsCurrentlyMoving = true 
       startPosition = button.center 
      } else if gesture.state == .changed { 
       print("changed") 
      } else if gesture.state == .ended{ 
       print("ended") 
       cardIsCurrentlyMoving = false 
      } 
     } 

} 
+0

O這是愚蠢的從我嘿嘿...會在4分鐘內接受答案 –

+0

這種情況有時與我同時發生:) – Surjeet