2017-06-18 10 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に変更されます。しかし、ボタンを移動しようとすると何も起こりません。これはcardIsCurrentlyMoving.beganではtrueに設定されていますが、gesture.state .changed.endedは決して呼び出されないため、falseに戻ることはありません。

指を離してもう一度ボタンをタッチすると、何も起こりません。 UIPanGestureRecognizer.changed.endedを実行しないのはなぜですか?

ありがとうございました。

答えて

1

は私が継続的に変更された状態でメソッドを呼び出して、あなたのif文

if !cardIsCurrentlyMoving{ 

} 

パンジェスチャーをチェックする必要があると思います。だから、userDragged funcは常にを呼び出していますが、あなたの上記の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

これは私の愚かだったhehe ... 4分で答えを受け入れるでしょう –

+0

それは時々私と同様に起こります:) – Surjeet

関連する問題